最新国产好看的视频,伊人天堂AV在线,国产Aaaaaa视频,蜜臀视频在线观看一区,人妻av色图,密臀久久久精品影片,青青视频免费观看毛片,久草在线观看视,国产三级精品色情在线

C語言開發(fā)實(shí)現(xiàn)貪吃蛇游戲

 更新時(shí)間:2020年07月27日 15:19:00   作者:C 小白  
這篇文章主要為大家詳細(xì)介紹了C語言開發(fā)實(shí)現(xiàn)貪吃蛇游戲,文中示例代碼介紹的非常詳細(xì),具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下

本文實(shí)例為大家分享了C語言實(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)起來
/*
  蛇頭每向前動(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í),按向下鍵無效(其他三個(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)專題,分享給大家:

C++經(jīng)典小游戲匯總

python經(jīng)典小游戲匯總

python俄羅斯方塊游戲集合

JavaScript經(jīng)典游戲 玩不停

java經(jīng)典小游戲匯總

javascript經(jīng)典小游戲匯總

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

相關(guān)文章

  • c語言獲取用戶輸入字符串是scanf和gets的區(qū)別詳解

    c語言獲取用戶輸入字符串是scanf和gets的區(qū)別詳解

    今天小編就為大家分享一篇c語言獲取用戶輸入字符串是scanf和gets的區(qū)別詳解,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。一起跟隨小編過來看看吧
    2018-07-07
  • 詳解C語言編程之thread多線程

    詳解C語言編程之thread多線程

    這篇文章主要為大家介紹了C語言編程之thread多線程,具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下,希望能夠給你帶來幫助
    2021-12-12
  • C++日期類的實(shí)現(xiàn)日期計(jì)算器舉例詳解

    C++日期類的實(shí)現(xiàn)日期計(jì)算器舉例詳解

    這篇文章主要給大家介紹了關(guān)于C++日期類實(shí)現(xiàn)日期計(jì)算器的相關(guān)資料,我們要考慮日期的增加和減少,自增和自減,以及兩個(gè)日期類的比較,以及當(dāng)前日期類的日期顯示和用戶的輸入輸出,需要的朋友可以參考下
    2024-05-05
  • C++11新特性std::tuple的使用方法

    C++11新特性std::tuple的使用方法

    這篇文章主要介紹了C++11新特性-std::tuple的使用方法,文中通過示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧
    2020-10-10
  • Qt中QStringList與QString的常用方法總結(jié)

    Qt中QStringList與QString的常用方法總結(jié)

    這篇文章主要為大家總結(jié)了Qt中QString 與 (QStringList | QByteArray)之間的轉(zhuǎn)換,以及QString、QStringList的一些常用方法,感興趣的可以收藏一下
    2022-12-12
  • c語言實(shí)現(xiàn)奇偶排序算法

    c語言實(shí)現(xiàn)奇偶排序算法

    這篇文章主要介紹了c語言實(shí)現(xiàn)奇偶排序算法,有需要的朋友可以參考一下
    2013-12-12
  • 淺析C++ new的三種面貌

    淺析C++ new的三種面貌

    這篇文章主要介紹了C++ new的三種面貌,幫助大家更好的理解和學(xué)習(xí)c++,感興趣的朋友可以了解下
    2020-08-08
  • C基礎(chǔ) redis緩存訪問詳解

    C基礎(chǔ) redis緩存訪問詳解

    下面小編就為大家?guī)硪黄狢基礎(chǔ) redis緩存訪問詳解。小編覺得挺不錯(cuò)的,現(xiàn)在就分享給大家,也給大家做個(gè)參考。一起跟隨小編過來看看吧
    2016-06-06
  • C++命名空間域的實(shí)現(xiàn)示例

    C++命名空間域的實(shí)現(xiàn)示例

    命名空間域就是一個(gè)獨(dú)立的空間外面不能直接調(diào)用該空間域只能用訪問限定符指定訪問該空間域,本文主要介紹了C++命名空間域的實(shí)現(xiàn)示例,具有一定的參考價(jià)值,感興趣的可以了解一下
    2024-01-01
  • C語言實(shí)現(xiàn)ATM自動(dòng)取款機(jī)系統(tǒng)的示例代碼

    C語言實(shí)現(xiàn)ATM自動(dòng)取款機(jī)系統(tǒng)的示例代碼

    ATM自動(dòng)取款機(jī)系統(tǒng)是銀行業(yè)務(wù)流程中十分重要且必備的環(huán)節(jié)之一,在銀行業(yè)務(wù)流程中起著承上啟下的作用。本文將用C語言實(shí)現(xiàn)一個(gè)簡(jiǎn)單的ATM自動(dòng)取款機(jī)系統(tǒng),需要的可以參考一下
    2022-08-08

最新評(píng)論

嘉义市| 香格里拉县| 贵阳市| 武隆县| 塔河县| 洞口县| 进贤县| 黔江区| 花莲市| 卓资县| 项城市| 太白县| 调兵山市| 商城县| 永寿县| 县级市| 富裕县| 扎赉特旗| 东港市| 疏勒县| 建始县| 县级市| 连城县| 榆树市| 黄大仙区| 泽库县| 彭泽县| 略阳县| 瓦房店市| 霸州市| 肃南| 临泽县| 大英县| 辉南县| 青龙| 石台县| 江城| 兰州市| 平泉县| 仁怀市| 岚皋县|