|
使用vs2017實(shí)現(xiàn)的貪吃蛇小游戲
基于c語(yǔ)言,玩了很久的單片機(jī)了突然想回去玩玩上位機(jī)就跟著視頻學(xué)些了這個(gè)
因?yàn)椴粫?huì)錄制視頻視頻就不上傳了
純屬個(gè)人興趣愛(ài)好
- #include <stdio.h>
- #include <stdlib.h>
- #include <time.h>
- #include <conio.h>
- #include <windows.h>
- //輔助宏定義
- #define maph 25
- #define mapw 40
- #define snakesize 50
- struct
- {
- //如何去定位:坐標(biāo)
- int x;
- int y;
- }food;
- //蛇的結(jié)構(gòu)體
- struct
- {
- //記錄蛇得坐標(biāo)
- int x[snakesize];
- int y[snakesize];
- //蛇的長(zhǎng)度
- int len;
- int speed;
- }snake;
- //全局變量
- int key = 'w';//初始方向
- int changeFlage = 0;//變化標(biāo)記
- //////////////////////
- //模塊設(shè)計(jì)
- ////////////////////
- //地圖
- void drawmap();
- //食物
- void creatfood();
- //按鍵控制方向
- void keydown();
- //狀態(tài),判斷是否結(jié)束游戲
- int snakestatus();
- //光標(biāo)移動(dòng),光標(biāo)移動(dòng)
- void gotoxy(int x,int y);
- //////////////////
- ////////////主函數(shù)
- //////////
- int main(void)
- {
- drawmap();
- while (1)
- {
- creatfood();
- Sleep(snake.speed);
- keydown();
- if (!snakestatus())
- {
- break;
- }
- }
- gotoxy(mapw/2, maph/2);
- printf("Game Over");
- system("pause");
- return 0;
- }
- //地圖
- void drawmap()
- { //○食物■墻和貪吃蛇
- //隨機(jī)函數(shù)種子
- srand((unsigned int)time(NULL));
- //圈地
- for (int i = 0; i <= maph; i++)
- {
- gotoxy(0,i);
- printf("■");
- gotoxy(mapw-2, i);
- printf("■");
- }
- for (int i = 1; i <= mapw; i+=2)
- {
- gotoxy(i, 0);
- printf("■");
- gotoxy(i, maph-1);
- printf("■");
- }
- //化蛇
- //確定蛇的屬性
- snake.len = 3;
- snake.speed = 300;
- snake.x[0] = mapw / 2;
- snake.y[0] = maph / 2;//將蛇放到屏幕中間
- //畫(huà)蛇頭
- gotoxy(snake.x[0],snake.y[0]);
- printf("■");
- //畫(huà)蛇的身體
- for (int k = 1; k < snake.len; k++)
- {
- snake.x[k] = snake.x[k - 1] + 2;
- snake.y[k] = snake.y[k-1];
- gotoxy(snake.x[k], snake.y[k]);
- printf("■");
- }
- //畫(huà)食物
- //坐標(biāo)的確定
- while(1)
- {food.x = rand() % (mapw - 4) + 2;
- food.y = rand() % (maph - 2) + 1;
- if (food.x % 2 == 0)
- {
- break;
- }
- }
- //將確定的坐標(biāo)畫(huà)出來(lái)
- gotoxy(food.x, food.y);
- printf("○");
- }
- //食物產(chǎn)生
- void creatfood()
- {
- //蛇吧食物吃了
- if (snake.x[0] == food.x&&food.y[0] == food.y)
- {
- srand((unsigned int )time(NULL));
- //產(chǎn)生的食物不能再蛇的身上并且坐標(biāo)要是偶數(shù)
- while (1)
- {
- int flag = 1;
- food.x = rand() % (mapw - 4) + 2;
- food.y = rand() % (maph - 2) + 1;
- //產(chǎn)生的食物不能再蛇的身上
- for (int k = 0; k < snake.len; k++)
- {
- if (snake.x[k] == food.x&&snake.y[k] == food.y)
- {
- flag = 0;
- break;
- }
- }
- if (flag&&food.x % 2 == 0)
- {
- break;
- }
- }
- }
- gotoxy(food.x,food.y);
- printf("○");
- snake.len++;
- changeFlage =1;//蛇的標(biāo)記
- }
- //按鍵實(shí)現(xiàn)
- void keydown()
- {
- //無(wú)按鍵的處理
- if (_kbhit())
- { //有按鍵接受
- fflush(stdin);
- key = _getch();
- }
- //擦除最后一節(jié)
- if (!changeFlage)
- {
- gotoxy(snake.x[snake.len-1], snake.y[snake.len - 1]);
- printf(" ");
- }
- //后面的蛇身處理
- for (int i =snake.len-1 ; i > 0; i--)
- {
- snake.x[i] = snake.x[i - 1];
- snake.y[i] = snake.y[i - 1];
- }
- //按鍵處理移動(dòng)方向的處理
- switch (key)
- {
- case 'w':
- case 'W':
- snake.y[0]--;
- break;
- case 's':
- case 'S':
- snake.y[0]++;
- break;
- case 'a':
- case 'A':
- snake.x[0]-=2;
- break;
- case 'd':
- case 'D':
- snake.x[0]+=2;
- break;
- }
- //蛇頭畫(huà)出來(lái)
- gotoxy(snake.x[0], snake.y[0]);
- printf("■");
- changeFlage = 0;
- gotoxy(maph +2,0);
- }
- //狀態(tài)
- int snakestatus()
- {
- if (snake.x[0] == 2 || snake.x[0] == maph-2 || snake.y[0] == 0 || snake.y[0] == mapw-1)
- return 0;
- //蛇頭不能吃自己
- for (int k = 1; k < snake.len; k++
- 余下內(nèi)容下載附件
-
復(fù)制代碼
全部資料51hei下載地址:
貪吃蛇c語(yǔ)言版本.docx
(16.32 KB, 下載次數(shù): 29)
2019-3-17 19:12 上傳
點(diǎn)擊文件名下載附件
2019-3-12 下載積分: 黑幣 -5
|
評(píng)分
-
查看全部評(píng)分
|