C語(yǔ)言開發(fā)實(shí)現(xiàn)貪吃蛇游戲
更新時(shí)間:2020年07月27日 15:19:00 作者:C 小白
這篇文章主要為大家詳細(xì)介紹了C語(yǔ)言開發(fā)實(shí)現(xiàn)貪吃蛇游戲,文中示例代碼介紹的非常詳細(xì),具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下
本文實(shí)例為大家分享了C語(yǔ)言實(shí)現(xiàn)貪吃蛇游戲的具體代碼,供大家參考,具體內(nèi)容如下
1、最好用VS運(yùn)行
2、用到的函數(shù)有:_kbhit _getch EasyX圖形庫(kù)內(nèi)一系列函數(shù)
3、蛇身與食物用矩形畫的
代碼如下:
#include<stdio.h> #include<graphics.h> //easyx頭文件 #include<conio.h> #include<time.h> /********************設(shè)置各種屬性**********************/ //坐標(biāo)屬性 typedef struct point { int x, y; }PYINT; //蛇 struct snake { PYINT xy[100]; //蛇的每節(jié)坐標(biāo)放到數(shù)組中 int position; //方向 int num; //長(zhǎng)度 }SNAKE; //食物 struct food{ PYINT fdxy; int flag; //是否存在 int grade; //成績(jī) }FOOD; //枚舉:方向 //也可用宏 #define enum position { up, down, left, right }; /**********************對(duì)蛇的操作*****************************/ //初始化蛇 //蛇的每節(jié)為 10x10填充的矩形 void initsnake() { SNAKE.xy[0].x = 0; SNAKE.xy[0].y = 0; //數(shù)組第一個(gè)元素為蛇頭 SNAKE.xy[1].x = 10; SNAKE.xy[1].y = 0; SNAKE.xy[2].x = 20; SNAKE.xy[2].y = 0; SNAKE.position = right; //方向 (隨便給) SNAKE.num = 3; //數(shù)量 (隨便給) } //畫蛇 void Drawsnake() { for (int i = 0; i < SNAKE.num; i++) { setlinecolor(BLACK); setfillcolor(RGB(rand() % 255, rand() % 255, rand() % 255)); fillrectangle(SNAKE.xy[i].x, SNAKE.xy[i].y, SNAKE.xy[i].x + 10, SNAKE.xy[i].y + 10); } } //使蛇動(dòng)起來(lái) /* 蛇頭每向前動(dòng)一格,其后緊隨蛇頭: 我們把蛇的每節(jié)坐標(biāo)放到數(shù)組里(蛇頭坐標(biāo)放在數(shù)組的第一個(gè)),移動(dòng)時(shí),只需使蛇頭(數(shù)組第一個(gè)元素)改變,其后與前面交換; */ void Movesnake() { for (int i = SNAKE.num; i > 0; i--) { SNAKE.xy[i].x = SNAKE.xy[i - 1].x; SNAKE.xy[i].y = SNAKE.xy[i - 1].y; //使每個(gè)元素向前移動(dòng) } switch (SNAKE.position) { case up: SNAKE.xy[0].y -= 10; break; case down: SNAKE.xy[0].y += 10; break; //上下移動(dòng) X坐標(biāo)不發(fā)生改變 case left: SNAKE.xy[0].x -= 10; break; case right: SNAKE.xy[0].x += 10; break; //左右移動(dòng) Y坐標(biāo)不發(fā)生改變 } } /******************************按鍵操作*****************************************/ //當(dāng)蛇向上運(yùn)動(dòng)時(shí),按向下鍵無(wú)效(其他三個(gè)相同) void Keydown() { char ch = _getch(); switch (ch) { case 'W': case 'w': case 72: //小鍵盤上的“向上” if (SNAKE.position != down) //是否向下 SNAKE.position = up; break; case 'S': case 's': case 80: //小鍵盤上的“向下” if (SNAKE.position != up) //是否向上 SNAKE.position = down; break; case 'A': case 'a': case 75: //小鍵盤上的“向左” if (SNAKE.position != right) //是否向右 SNAKE.position = left; break; case 'D': case 'd': case 77: //小鍵盤上的“向右” if (SNAKE.position != left) //是否向左 SNAKE.position = right; break; } } /******************************食物操作**************************************/ //初始化食物 void initfood() { FOOD.fdxy.x = rand() % 60 * 10; FOOD.fdxy.y = rand() % 40 * 10; //把食物的坐標(biāo)控制在游戲界面內(nèi) FOOD.flag = 1; //1代表存在食物 //FOOD.grade = 0; for (int i = 0; i < SNAKE.num; i++) { if (FOOD.fdxy.x == SNAKE.xy[i].x&&FOOD.fdxy.y == SNAKE.xy[i].y) //如果食物出現(xiàn)在蛇身上,重新產(chǎn)生X Y的值 { FOOD.fdxy.x = rand() % 60 * 10; FOOD.fdxy.y = rand() % 40 * 10; } } } //畫食物 void Drawfood() { setlinecolor(BLACK); setfillcolor(RGB(rand() % 255, rand() % 255, rand() % 255)); fillrectangle(FOOD.fdxy.x, FOOD.fdxy.y, FOOD.fdxy.x + 10, FOOD.fdxy.y + 10); } /*************************************吃食物*************************************************/ void eatfood() { if (SNAKE.xy[0].x == FOOD.fdxy.x&&SNAKE.xy[0].y == FOOD.fdxy.y) { SNAKE.num++; FOOD.flag = 0; //食物存在的標(biāo)記(1:存在 0;不存在) FOOD.grade += 10; //每吃一個(gè)食物分?jǐn)?shù)加10 (每個(gè)食物是10分,可隨意改變) } } /*************************************顯示分?jǐn)?shù)*************************************************/ void putgrade() { char str[20] = " "; sprintf_s(str, "greade: %d", FOOD.grade); settextcolor(RED); //設(shè)置字體顏色 outtextxy(500, 50, str); } /***********************************游戲結(jié)束***************************************************/ //當(dāng)蛇頭撞墻(蛇頭撞上自身) //只分析一種情況 int gameover() { if (SNAKE.xy[0].x > 600 || SNAKE.xy[0].x < 0 | SNAKE.xy[0].y>400 || SNAKE.xy[0].y < 0) //撞墻 { initgraph(800, 600); settextcolor(RED); outtextxy(600, 400, "你撞墻了"); settextcolor(YELLOW); settextstyle(50, 50, "楷體"); //字體樣式 outtextxy(200, 250, "GAME OVER"); //指定位置輸出字符串 return 1; } return 0; } /*****************************************************************************************/ int main() { initgraph(600, 400); setbkcolor(BLACK); //背景顏色 cleardevice(); //清屏:刷新屏幕 srand((unsigned int)time(NULL)); //隨機(jī)數(shù)種子 initsnake(); Drawsnake(); while (1) { cleardevice(); //清屏 Movesnake(); Drawsnake(); if (FOOD.flag == 0) { initfood(); } Drawfood(); if (_kbhit()) { //_kbhit: 檢測(cè)是否有按鍵動(dòng)作 Keydown(); } if (gameover()) { //若函數(shù)返回1:結(jié)束游戲 break; } eatfood(); putgrade(); Sleep(100); //延長(zhǎng)時(shí)間 (即蛇移動(dòng)的速度) } _getch(); //防止閃屏 closegraph(); //關(guān)閉窗口 return 0; } /**********************************************************/ //RGB(rand() % 255, rand() % 255, rand() % 255) 在三基色范圍內(nèi)隨機(jī)產(chǎn)生 //記得安裝EasyX插件
更多有趣的經(jīng)典小游戲?qū)崿F(xiàn)專題,分享給大家:
以上就是本文的全部?jī)?nèi)容,希望對(duì)大家的學(xué)習(xí)有所幫助,也希望大家多多支持腳本之家。
您可能感興趣的文章:
- C語(yǔ)言實(shí)現(xiàn)簡(jiǎn)單貪吃蛇小游戲
- C語(yǔ)言實(shí)現(xiàn)貪吃蛇游戲設(shè)計(jì)
- C語(yǔ)言實(shí)現(xiàn)貪吃蛇游戲(單人版)
- C語(yǔ)言實(shí)現(xiàn)貪吃蛇游戲(命令行)
- C語(yǔ)言實(shí)現(xiàn)鏈表貪吃蛇
- C語(yǔ)言實(shí)現(xiàn)貪吃蛇小游戲
- C語(yǔ)言手把手教你實(shí)現(xiàn)貪吃蛇AI(下)
- C語(yǔ)言手把手教你實(shí)現(xiàn)貪吃蛇AI(中)
- 基于C語(yǔ)言實(shí)現(xiàn)的貪吃蛇游戲完整實(shí)例代碼
- C語(yǔ)言實(shí)現(xiàn)貪吃蛇游戲代碼
相關(guān)文章
Clion下載安裝使用的詳細(xì)教程(Win+MinGW)
這篇文章主要介紹了Clion下載安裝使用教程(Win+MinGW),本文通過(guò)圖文并茂的形式給大家介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或工作具有一定的參考借鑒價(jià)值,需要的朋友可以參考下2020-08-08