欧美bbbwbbbw肥妇,免费乱码人妻系列日韩,一级黄片

基于C語(yǔ)言實(shí)現(xiàn)貪吃蛇小游戲

 更新時(shí)間:2022年03月31日 15:41:49   作者:summery456  
這篇文章主要為大家詳細(xì)介紹了基于C語(yǔ)言實(shí)現(xiàn)貪吃蛇小游戲,文中示例代碼介紹的非常詳細(xì),具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下

本文實(shí)例為大家分享了C語(yǔ)言實(shí)現(xiàn)貪吃蛇小游戲的具體代碼,供大家參考,具體內(nèi)容如下

1.目標(biāo)要求:

1.上下左右控制蛇頭轉(zhuǎn)向
2.若蛇頭碰到食物,長(zhǎng)度加一
3.若蛇頭碰到邊框、碰到自身或蛇回頭,游戲結(jié)束

2.C語(yǔ)言代碼:

#include<stdio.h>
#include<stdlib.h>
#include<windows.h>
#include<conio.h>

#define interface_x 19//畫(huà)布行數(shù)
#define interface_y 60//畫(huà)布列數(shù)?

/*
? ? ??? ?《貪吃蛇》?? ?by:你最珍貴

?? ? ---------------------------------------?
?? ?|控制信號(hào): | 向上 | 向下 | 向左 | 向右 |
?? ? ---------------------------------------?
?? ?| ? ?鍵盤: | ?'i' | ?'k' | ?'j' | ?'l' |?
?? ? ---------------------------------------?
?? ??
?? ? 1.上下左右控制蛇頭轉(zhuǎn)向 ?
?? ? 2.若蛇頭碰到食物,長(zhǎng)度加一?
?? ? 3.若蛇頭碰到邊框或自身,游戲結(jié)束?

*/

void HideCursor(){?? ?//隱藏光標(biāo)位置 ,這個(gè)函數(shù)復(fù)制代碼就行?
?? ?CONSOLE_CURSOR_INFO cursor_info={1,0};?
?? ?SetConsoleCursorInfo(GetStdHandle(STD_OUTPUT_HANDLE),&cursor_info);
}
void gotoxy(int x,int y){?? ?//把光標(biāo)放在(0,0)位置 ,這個(gè)函數(shù)復(fù)制代碼就行
?? ?HANDLE handle = GetStdHandle(STD_OUTPUT_HANDLE);
?? ?COORD pos;
?? ?pos.X = x;
?? ?pos.Y = y;
?? ?SetConsoleCursorPosition(handle,pos);
}?

int IsEnd;//是否結(jié)束?
int canvas[interface_x+1][interface_y+1]={0};//畫(huà)布行數(shù)、列數(shù)?
int scores;//分?jǐn)?shù)?
int slow_v,slow_v_num;//移動(dòng)變慢的值(越大速度越慢),移動(dòng)變慢的變量
int food_x,food_y;//實(shí)物位置?
int snakeH_x,snakeH_y;//蛇頭位置?
int snake_direction; //蛇的方向?

void startup(){?? ?//【數(shù)據(jù)初始化】?
?? ?int i,j;?
?? ?HideCursor();//不顯示光標(biāo)?
?? ?IsEnd = 0;?
?? ?scores=0;?? ?
?? ?slow_v=2;
?? ?slow_v_num=1;?
?? ?for(i=1;i<=interface_x;i++){//設(shè)置邊框?
?? ??? ?canvas[i][1]=-1;
?? ??? ?canvas[i][interface_y]=-1;
?? ?}?
?? ?for(i=1;i<=interface_y;i++){//設(shè)置邊框?
?? ??? ?canvas[1][i]=-1;
?? ??? ?canvas[interface_x][i]=-1;
?? ?}
?? ?food_x=rand()%(interface_x-2)+2;//設(shè)置食物位置?
?? ?food_y=rand()%(interface_y-2)+2;
?? ?canvas[food_x][food_y]=-2;//設(shè)置食物?
?? ?snakeH_x=(interface_x/2);//設(shè)置蛇頭位置?
?? ?snakeH_y=3;
?? ?canvas[snakeH_x][snakeH_y]=1;//設(shè)置蛇頭?
?? ?snake_direction=4;
}
void show_begin(){//【初始頁(yè)面展示】?
?? ?int i,j;
?? ?int start=0;
?? ?char input;
??? ?while(!start){
??? ??? ?gotoxy(0,0);//每次輸出頁(yè)面把鼠標(biāo)放回(0,0)?
??? ??? ?for(i=1;i<=24/2-4;i++) printf("\n");?
?? ??? ?for(i=1;i<80/2-5;i++) printf(" ");
?? ??? ?printf("《貪吃蛇》\n\n");?
?? ??? ?for(i=1;i<80/2-9;i++) printf(" ");
?? ??? ?printf("請(qǐng)按任意鍵開(kāi)始游戲\n\n");
?? ??? ?for(i=1;i<=24/2-6;i++) printf("\n");
?? ??? ?if(kbhit()){
?? ??? ??? ?input = getch();
?? ??? ??? ?if(input) start=1;
?? ??? ?}
?? ?}
}?
void show(){?? ?//【顯示畫(huà)面】?
?? ?gotoxy(0,0);//每次輸出頁(yè)面把鼠標(biāo)放回(0,0)?
?? ?int i,j,k;?? ?
?? ?for(i=1;i<=(80-interface_y)/2+interface_y/2-10;i++) printf(" ");
?? ?printf("《貪吃蛇》") ;
?? ?for(i=1;i<=interface_y/2-8-8;i++) printf(" ");
?? ?printf("分?jǐn)?shù):%3d\n",scores);
?? ?for(i=1;i<=interface_x;i++){
?? ??? ?for(k=1;k<=(80-interface_y)/2;k++) printf(" ");//使屏幕對(duì)稱加的空格?
?? ??? ?for(j=1;j<=interface_y;j++){?? ??? ??? ?
?? ??? ??? ?if(canvas[i][j]==-1){//值為-1輸出邊框#?
?? ??? ??? ??? ?printf("#");
?? ??? ??? ?}else if(canvas[i][j]==-2){//值為-2輸出實(shí)物M?
?? ??? ??? ??? ?printf("M");
?? ??? ??? ?}else if(canvas[i][j]==1){//值為1輸出蛇頭@?
?? ??? ??? ??? ?printf("@");
?? ??? ??? ?}else if(canvas[i][j]>1){//值>1輸出蛇尾*?
?? ??? ??? ??? ?printf("*");
?? ??? ??? ?}else printf(" ");//值為0輸出空白?
?? ??? ?}
?? ??? ?printf("\n");
?? ?}
?? ?
}
void move_snake(){
?? ?int i,j;
?? ?int max=0;//最大值?
?? ?int max_x,max_y;//最大值位置
?? ?for(i=2;i<=interface_x-1;i++){
?? ??? ?for(j=2;j<=interface_y-1;j++){
?? ??? ??? ?if(canvas[i][j]>max){//尋找最大值?
?? ??? ??? ??? ?max=canvas[i][j];
?? ??? ??? ??? ?max_x=i;max_y=j;
?? ??? ??? ?}
?? ??? ??? ?if(canvas[i][j]>0){//把蛇頭蛇尾每一個(gè)值加1?
?? ??? ??? ??? ?canvas[i][j]++;
?? ??? ??? ?}?? ??? ??? ??
?? ??? ?}
?? ?}
?? ?if(snake_direction==1){//上?
?? ??? ?snakeH_x--;?
?? ?}else if(snake_direction==2){//下?
?? ??? ?snakeH_x++;?
?? ?}else if(snake_direction==3){//左?
?? ??? ?snakeH_y--;?
?? ?}else if(snake_direction==4){//右?
?? ??? ?snakeH_y++;?
?? ?}?? ??
?? ?if(canvas[snakeH_x][snakeH_y]==-1||canvas[snakeH_x][snakeH_y]>1){
?? ??? ?exit(1);//碰到邊界或自身,游戲結(jié)束?
?? ?}else if(canvas[snakeH_x][snakeH_y]==-2){//吃到食物?
?? ??? ?canvas[snakeH_x][snakeH_y]=1;//添加新蛇頭?
?? ??? ?food_x=rand()%(interface_x-2)+2;//設(shè)置新食物位置?
?? ??? ?food_y=rand()%(interface_y-2)+2;
?? ??? ?canvas[food_x][food_y]=-2;
?? ??? ?printf("\a") ;
?? ??? ?scores++;
?? ?}else{//什么都沒(méi)有碰到則移動(dòng)?
?? ??? ?canvas[snakeH_x][snakeH_y]=1;//添加新蛇頭?
?? ??? ?canvas[max_x][max_y]=0;//去掉蛇尾?
?? ?}?
}
void update_outinput(){?? ?//【與輸入無(wú)關(guān)的更新】?
?? ?int i;
?? ?slow_v_num=(slow_v_num==slow_v)? 1:slow_v_num+1;
?? ?if(slow_v_num==slow_v){//每隔slow_v次運(yùn)行一次?? ??? ?
?? ??? ?move_snake();?
?? ?}?
?? ?
}
void update_input(){//【與輸入有關(guān)的更新】?
?? ?char input;
?? ?if(kbhit()){
?? ??? ?input = getch();
?? ??? ?if(input=='i'){//上?
?? ??? ??? ?if(snake_direction==1){//如果輸入與原來(lái)方向一致是加速功能,否則為轉(zhuǎn)向?
?? ??? ??? ??? ?move_snake();//加速?
?? ??? ??? ?}else snake_direction=1;//轉(zhuǎn)向?
?? ??? ?}else if(input=='k'){//下?
?? ??? ??? ?if(snake_direction==2){
?? ??? ??? ??? ?move_snake();
?? ??? ??? ?}else snake_direction=2;
?? ??? ?}else if(input=='j'){//左?
?? ??? ??? ?if(snake_direction==3){
?? ??? ??? ??? ?move_snake();
?? ??? ??? ?}else snake_direction=3;
?? ??? ?}else if(input=='l'){//右?
?? ??? ??? ?if(snake_direction==4){
?? ??? ??? ??? ?move_snake();
?? ??? ??? ?}snake_direction=4;
?? ??? ?}?? ?
?? ?}
}
void show_end(){//【顯示失敗界面】?
?? ?system("cls");?
?? ?int i;
?? ?for(i=1;i<24/2-2;i++) putchar('\n');
?? ?for(i=1;i<80/2-5;i++) putchar(' ');
?? ?printf("game over!\n\n");
?? ?for(i=1;i<80/2-7;i++) putchar(' ');
?? ?printf("您的分?jǐn)?shù)是:%3d分\n",scores);
?? ?for(i=1;i<24/2-3;i++) putchar('\n');?? ?
?? ?system("pause");//暫停?
?? ?system("pause");//暫停
}

int main(){
?? ?startup();?? ?//數(shù)據(jù)初始化
?? ?show_begin();//初始頁(yè)面?
?? ?while(!IsEnd){?? ?//游戲循環(huán)執(zhí)行?
?? ??? ?show();?? ?// 顯示畫(huà)面?
?? ??? ?update_outinput();?? ?//與輸入無(wú)關(guān)的更新?
?? ??? ?update_input();?? ?//與輸入有關(guān)的更新?
?? ?}
?? ?show_end(); //顯示失敗界面?
?? ?return 0;
}

3.運(yùn)行結(jié)果:

小游戲玩法:

     《貪吃蛇》by:你最珍貴

 --------------------------------------- 
|控制信號(hào): |  向上 |  向下 |  向左 |  向右 |
 --------------------------------------- 
|   鍵盤:    |    'i'    |   'k'   |   'j'    |    'l'   | 
 --------------------------------------- 

以上就是本文的全部?jī)?nèi)容,希望對(duì)大家的學(xué)習(xí)有所幫助,也希望大家多多支持腳本之家。

相關(guān)文章

  • C語(yǔ)言中函數(shù)的聲明、定義及使用的入門教程

    C語(yǔ)言中函數(shù)的聲明、定義及使用的入門教程

    這篇文章主要介紹了C語(yǔ)言中函數(shù)的聲明、定義及使用的入門教程,重點(diǎn)講述了main函數(shù)的相關(guān)知識(shí),需要的朋友可以參考下
    2015-12-12
  • C++命名空間和缺省參數(shù)介紹

    C++命名空間和缺省參數(shù)介紹

    這篇文章主要介紹了C++命名空間和缺省參數(shù),使用命名空間的目的是對(duì)標(biāo)識(shí)符的名稱進(jìn)行本地化,以避免命名沖突或名字污染,namespace關(guān)鍵字的出現(xiàn)就是針對(duì)這種問(wèn)題的,缺省參數(shù)是聲明或定義函數(shù)時(shí)為函數(shù)的參數(shù)指定一個(gè)默認(rèn)值,更多詳細(xì)內(nèi)容需要的小伙伴可以參考下面文章內(nèi)容
    2022-01-01
  • 深入了解C++11中promise和future的使用

    深入了解C++11中promise和future的使用

    C++11中promise和future機(jī)制是用于并發(fā)編程的一種解決方案,用于在不同線程完成數(shù)據(jù)傳遞(異步操作)。Promise和Future提供了訪問(wèn)異步操作結(jié)果的機(jī)制,可以在線程之間傳遞數(shù)據(jù)和異常消息。本文就來(lái)聊聊二者的使用,希望對(duì)大家有所幫助
    2022-11-11
  • C++如何將二叉搜索樹(shù)轉(zhuǎn)換成雙向循環(huán)鏈表(雙指針或數(shù)組)

    C++如何將二叉搜索樹(shù)轉(zhuǎn)換成雙向循環(huán)鏈表(雙指針或數(shù)組)

    這篇文章主要介紹了C++如何將二叉搜索樹(shù)轉(zhuǎn)換成雙向循環(huán)鏈表(雙指針或數(shù)組),具有很好的參考價(jià)值,希望對(duì)大家有所幫助。如有錯(cuò)誤或未考慮完全的地方,望不吝賜教
    2022-05-05
  • C++鏈表實(shí)現(xiàn)通訊錄管理系統(tǒng)

    C++鏈表實(shí)現(xiàn)通訊錄管理系統(tǒng)

    這篇文章主要為大家詳細(xì)介紹了C++鏈表實(shí)現(xiàn)通訊錄管理系統(tǒng),文中示例代碼介紹的非常詳細(xì),具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下
    2019-12-12
  • C++11中的chrono庫(kù)詳解

    C++11中的chrono庫(kù)詳解

    C++11提供了日期時(shí)間相關(guān)的庫(kù)chrono,通過(guò)chrono庫(kù)可以很方便的處理日期和時(shí)間,這篇文章主要介紹了C++11中的chrono庫(kù),需要的朋友可以參考下
    2023-03-03
  • c語(yǔ)言:基于函數(shù)指針的兩個(gè)示例分析

    c語(yǔ)言:基于函數(shù)指針的兩個(gè)示例分析

    本篇文章是對(duì)c語(yǔ)言中函數(shù)指針的兩個(gè)示例做了詳細(xì)的分析介紹,需要的朋友參考下
    2013-05-05
  • C語(yǔ)言算法積累分離數(shù)位示例

    C語(yǔ)言算法積累分離數(shù)位示例

    這篇文章主要為大家介紹了C語(yǔ)言算法積累分離數(shù)位的實(shí)現(xiàn)示例,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進(jìn)步,早日升職加薪
    2022-06-06
  • C語(yǔ)言示例講解動(dòng)態(tài)/文件/靜態(tài)功能版本的通訊錄實(shí)現(xiàn)

    C語(yǔ)言示例講解動(dòng)態(tài)/文件/靜態(tài)功能版本的通訊錄實(shí)現(xiàn)

    通訊錄是一個(gè)可以記錄親人、好友信息的工具,這篇文章主要為大家詳細(xì)介紹了C語(yǔ)言實(shí)現(xiàn)通訊錄管理,文中示例代碼介紹的非常詳細(xì),具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下
    2022-07-07
  • EasyC++靜態(tài)持續(xù)變量

    EasyC++靜態(tài)持續(xù)變量

    這篇文章主要介紹了EasyC++靜態(tài)持續(xù)變量,除了自動(dòng)存儲(chǔ)變量之后,C++當(dāng)中還有靜態(tài)持續(xù)變量。關(guān)于靜態(tài)持續(xù)變量的定義C++和C語(yǔ)言是一樣的,它擁有三種鏈接性,即外部鏈接性、內(nèi)部連接性和無(wú)鏈接性,下面一起進(jìn)入文章了解更具體內(nèi)容吧
    2021-12-12

最新評(píng)論