中文字幕av专区_日韩电影在线播放_精品国产精品久久一区免费式_av在线免费观看网站

溫馨提示×

溫馨提示×

您好,登錄后才能下訂單哦!

密碼登錄×
登錄注冊×
其他方式登錄
點擊 登錄注冊 即表示同意《億速云用戶服務條款》

C語言開發如何實現貪吃蛇游戲

發布時間:2020-07-30 10:47:46 來源:億速云 閱讀:203 作者:小豬 欄目:開發技術

這篇文章主要講解了C語言開發如何實現貪吃蛇游戲,內容清晰明了,對此有興趣的小伙伴可以學習一下,相信大家閱讀完之后會有幫助。

1、最好用VS運行

2、用到的函數有:_kbhit _getch EasyX圖形庫內一系列函數
3、蛇身與食物用矩形畫的

代碼如下:

#include<stdio.h>
#include<graphics.h>   //easyx頭文件
#include<conio.h>
#include<time.h>
/********************設置各種屬性**********************/
//坐標屬性
typedef struct point {
 int x, y;
}PYINT;
//蛇
struct snake {
 PYINT xy[100];    //蛇的每節坐標放到數組中
 int position;    //方向
 int num;       //長度
}SNAKE;
//食物
struct food{
 PYINT fdxy;
 int flag;      //是否存在
 int grade;      //成績
}FOOD;
//枚舉:方向
//也可用宏 #define
enum position
{
 up, down, left, right
};
/**********************對蛇的操作*****************************/
//初始化蛇
//蛇的每節為 10x10填充的矩形
void initsnake()
{
 SNAKE.xy[0].x = 0;
 SNAKE.xy[0].y = 0;
 //數組第一個元素為蛇頭
 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;      //數量 (隨便給)
}
//畫蛇
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);
 }
}
//使蛇動起來
/*
  蛇頭每向前動一格,其后緊隨蛇頭:
  我們把蛇的每節坐標放到數組里(蛇頭坐標放在數組的第一個),移動時,只需使蛇頭(數組第一個元素)改變,其后與前面交換;
*/
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;  //使每個元素向前移動
 }
 switch (SNAKE.position)
 {
 case up:          
 SNAKE.xy[0].y -= 10;
 break;
 case down:
 SNAKE.xy[0].y += 10;
 break;
 //上下移動 X坐標不發生改變
 case left:
 SNAKE.xy[0].x -= 10;
 break;
 case right:
 SNAKE.xy[0].x += 10;
 break;
  //左右移動 Y坐標不發生改變
 }
}
/******************************按鍵操作*****************************************/
//當蛇向上運動時,按向下鍵無效(其他三個相同)
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;           //把食物的坐標控制在游戲界面內
 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) //如果食物出現在蛇身上,重新產生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;      //食物存在的標記(1:存在 0;不存在)
 FOOD.grade += 10;    //每吃一個食物分數加10 (每個食物是10分,可隨意改變)
 }
}
/*************************************顯示分數*************************************************/
void putgrade()
{
 char str[20] = " ";
 sprintf_s(str, "greade: %d", FOOD.grade);
 settextcolor(RED);             //設置字體顏色
 outtextxy(500, 50, str);
}
/***********************************游戲結束***************************************************/
//當蛇頭撞墻(蛇頭撞上自身)
//只分析一種情況
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)); //隨機數種子
 initsnake();
 Drawsnake();
 while (1)
 {
 cleardevice(); //清屏
 Movesnake();
 Drawsnake();
 if (FOOD.flag == 0) {
  initfood();
 }
 Drawfood();
 if (_kbhit()) {   //_kbhit: 檢測是否有按鍵動作
  Keydown();
 }
 if (gameover()) {  //若函數返回1:結束游戲
  break;
 }
 eatfood();
 putgrade();
 Sleep(100);  //延長時間 (即蛇移動的速度)
 }
 _getch();     //防止閃屏
 closegraph();   //關閉窗口
 return 0;
}
/**********************************************************/
//RGB(rand() % 255, rand() % 255, rand() % 255) 在三基色范圍內隨機產生
//記得安裝EasyX插件

看完上述內容,是不是對C語言開發如何實現貪吃蛇游戲有進一步的了解,如果還想學習更多內容,歡迎關注億速云行業資訊頻道。

向AI問一下細節

免責聲明:本站發布的內容(圖片、視頻和文字)以原創、轉載和分享為主,文章觀點不代表本網站立場,如果涉及侵權請聯系站長郵箱:is@yisu.com進行舉報,并提供相關證據,一經查實,將立刻刪除涉嫌侵權內容。

AI

青川县| 革吉县| 平和县| 唐山市| 淮南市| 英山县| 牟定县| 阿合奇县| 通道| 高尔夫| 丁青县| 齐河县| 广丰县| 西盟| 绥宁县| 梅河口市| 巴楚县| 泌阳县| 平利县| 金坛市| 兴宁市| 绥滨县| 长汀县| 巧家县| 山阴县| 苏州市| 奉化市| 桦甸市| 西丰县| 阿鲁科尔沁旗| 衡山县| 威海市| 达州市| 富民县| 易门县| 鲁山县| 黄浦区| 报价| 万源市| 德兴市| 东城区|