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

C語言實現(xiàn)貪吃蛇游戲(命令行)

 更新時間:2020年06月30日 11:26:09   作者:xiao_dou_ya_cool  
這篇文章主要為大家詳細介紹了C語言命令行實現(xiàn)貪吃蛇游戲,文中示例代碼介紹的非常詳細,具有一定的參考價值,感興趣的小伙伴們可以參考一下

這是一個純C語言寫的貪吃蛇游戲,供大家參考,具體內(nèi)容如下

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

#define SNAKE_LENGTH 100//定義蛇的最大長度
#define SCREEN_WIDETH 80
#define SCREEN_HEIGHT 30

//定義每一節(jié)蛇的坐標
struct coor{
 int x;
 int y;
};

//枚舉方向
enum CH {
 right = VK_RIGHT,
 left = VK_LEFT,
 up = VK_UP,
 down = VK_DOWN
};

//定義蛇的屬性
struct snake{
 int len;//當前蛇的長度
 struct coor coord[SNAKE_LENGTH];//每一節(jié)蛇的坐標
 enum CH CH;//定義蛇的方向
 int SPEED;
 int flag;//定義蛇的狀態(tài)  1表示存活  0表示死亡
}snake;

//光標移動函數(shù)
void gotoxy(int x, int y)
{
 COORD pos;
 pos.X = x;
 pos.Y = y;
 SetConsoleCursorPosition(GetStdHandle(STD_OUTPUT_HANDLE), pos);
}

//初始化游戲界面
void init_sence()
{
 //初始化上下墻
 for (int i = 0; i < SCREEN_WIDETH; i += 2)
 {
 gotoxy(i,0);
 printf("■");
 gotoxy(i, SCREEN_HEIGHT);
 printf("■");
 }
 //初始化左右墻
 for (int i = 0; i <=SCREEN_HEIGHT; i++)
 {
 gotoxy(0, i);
 printf("■");
 gotoxy(SCREEN_WIDETH,i);
 printf("■");
 }
 //打印提示信息
 gotoxy(SCREEN_WIDETH + 5, 2);
 printf("\t\t貪吃蛇");
 gotoxy(SCREEN_WIDETH + 5, 6);
 printf("2018//12//1");
 gotoxy(SCREEN_WIDETH + 5, 8);
 printf("作者:小豆芽");
 gotoxy(SCREEN_WIDETH + 5, 10);
 printf("F1:加速\tF2:減速");
 gotoxy(SCREEN_WIDETH + 5, 12);
 printf("CTRL:繼續(xù)\t空格:暫停");
 gotoxy(SCREEN_WIDETH + 5, 14);
 printf("ESC:退出游戲");
 gotoxy(SCREEN_WIDETH + 5, 28);
 printf("建議:QQ:2862841130:::");
}

struct foodcoord {
 int x;
 int y;
 int flag;//定義食物的狀態(tài)
}food;


//**這是c程序**


#include"snake.h"
//蛇的移動
void move_snake();
//畫出蛇
void draw_snake();
//產(chǎn)生食物
void creatfood();
//判斷蛇是否吃到食物
void eatfood();
//判斷蛇是否死掉
void SnakeState();


int main()
{
 //設置窗口大小
 system("mode con cols=110 lines=31");
 //設置標題
 SetConsoleTitleA("貪吃蛇");


 //初始化蛇
begin:
 snake.CH = VK_RIGHT;//初始化方向
 snake.len = 5; //初始化長度
 snake.SPEED = 300;//初始化蛇的移動速度
 snake.coord[1].x = SCREEN_WIDETH / 2;//初始化蛇頭的坐標
 snake.coord[1].y = SCREEN_HEIGHT / 2;
 snake.coord[2].x = SCREEN_WIDETH / 2-2;//初始化蛇頭的坐標
 snake.coord[2].y = SCREEN_HEIGHT / 2;
 snake.coord[3].x = SCREEN_WIDETH / 2-4;//初始化蛇頭的坐標
 snake.coord[3].y = SCREEN_HEIGHT / 2;

 //初始化食物狀態(tài)
 food.flag = 1;//1表示吃到食物  0表示沒有吃到食物

   //初始化食物狀態(tài)
 snake.flag = 1;//1活 0死

 init_sence();//初始化游戲界面
 while (1)
 {
 draw_snake();//畫蛇
 Sleep(snake.SPEED);//蛇的移動速度
 move_snake();//移動蛇
 if(food.flag)
 creatfood();//產(chǎn)生食物
 eatfood();//判斷是否吃到食物
 SnakeState();//判斷蛇是否死亡
 if (!snake.flag)break;
 }
 system("cls");
 gotoxy(SCREEN_WIDETH/2, SCREEN_HEIGHT/2-4);
 printf(" GAME OVER!!!");
 gotoxy(SCREEN_WIDETH / 2-6, SCREEN_HEIGHT / 2+2);
 printf("你的得分是:\t\t\t%d ",snake.len-1);
 gotoxy(SCREEN_WIDETH / 2-6, SCREEN_HEIGHT / 2+4);
 printf("我不服再來:\t\t\tCTRL ");
 gotoxy(SCREEN_WIDETH / 2-6, SCREEN_HEIGHT / 2+6);
 printf("算了垃圾游戲毀我青春:\t\tESC");

 while (1)
 {
 if (GetAsyncKeyState(VK_CONTROL))
 {
  system("cls");
  goto begin;
 }
 else if (GetAsyncKeyState(VK_ESCAPE))
  return 0;
 }
}

//蛇的移動
void move_snake()
{
 //判斷是否有按鍵操作
 if (GetAsyncKeyState(up))
 {
 if(snake.CH!=down)snake.CH = up;
 }
 else if (GetAsyncKeyState(down))
 {
 if (snake.CH != up)snake.CH = down;
 }
 else if (GetAsyncKeyState(right))
 {
 if (snake.CH != left)snake.CH = right;
 }
 else if (GetAsyncKeyState(left))
 {
 if (snake.CH != right)snake.CH = left;
 }
 else if (GetAsyncKeyState(VK_F1))
 {
 if(snake.SPEED>=100)snake.SPEED -= 50;
 }
 else if (GetAsyncKeyState(VK_F2))
 {
 if (snake.SPEED <= 3000)snake.SPEED += 100;
 }
 //根據(jù)檢測到的方向改變蛇頭的位置
 switch (snake.CH)
 {
 case right:snake.coord[1].x += 2; break;
 case left:snake.coord[1].x -= 2; break;
 case up:snake.coord[1].y -= 1; break;
 case down:snake.coord[1].y += 1; break;
 }
 
 
}

//畫出蛇
void draw_snake()
{
 //畫出蛇頭
 gotoxy(snake.coord[1].x, snake.coord[1].y);
 printf("□");

 //畫出蛇身,直接一個for循環(huán)實現(xiàn)
 for (int i = 2; i <= snake.len; i++)
 {
 gotoxy(snake.coord[i].x, snake.coord[i].y);
 printf("□");
 }
 //擦掉尾巴
 gotoxy(snake.coord[snake.len].x, snake.coord[snake.len].y);
 printf(" ");

 //遍歷每一節(jié)蛇
 for (int i = snake.len; i >1; i--)
 {
 snake.coord[i].x = snake.coord[i - 1].x;
 snake.coord[i].y = snake.coord[i - 1].y;
 }
 
 gotoxy(0, 0);
 printf("■");
 gotoxy(85, 25);
 printf("得分:%d ", snake.len-1);
 
}

//產(chǎn)生食物
void creatfood()
{
 //隨機種子生成
 srand((unsigned)time(NULL));
 if(food.flag)
 while (1)
 {
 food.x = rand() % 80;
 food.y = rand() % 30;
 if (food.x % 2 == 0 && food.x >= 2 && food.x <= 78 && food.y > 1 && food.y < 30)
 {
  int flag = 0;
  //判斷產(chǎn)生的食物可不可能在蛇的身體上
  for (int i = 1; i <= snake.len; i++)
  {
  if (snake.coord[i].x == food.x&&snake.coord[i].y == food.y)
  {
   flag = 1;
   break;
  }
  }
  if (flag)continue;
  //繪制食物
  else
  {
  gotoxy(food.x, food.y);
  printf("⊙");
  food.flag = 0;
  break;
  }
 }
 }
 food.flag = 0;
}

//判斷蛇是否吃到食物
void eatfood()
{
 //只需要判斷蛇頭是否與食物重合
 if (food.x == snake.coord[1].x&&food.y == snake.coord[1].y)
 {
  snake.len+=1;
  food.flag = 1;
 }
}

//判斷蛇是否死掉
void SnakeState()
{
 if (snake.coord[1].x < 2 || snake.coord[1].x>78 || snake.coord[1].y < 1 || snake.coord[1].y>29)
 snake.flag = 0;

 for (int i = 2; i <= snake.len; i++)
 {
 if (snake.coord[1].x == snake.coord[i].x&&snake.coord[1].y == snake.coord[i].y)
  snake.flag = 0;
 }
 
}

更多有趣的經(jīng)典小游戲?qū)崿F(xiàn)專題,分享給大家:

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

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

python俄羅斯方塊游戲集合

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

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

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

以上就是本文的全部內(nèi)容,希望對大家的學習有所幫助,也希望大家多多支持腳本之家。

相關文章

  • 希爾排序算法的C語言實現(xiàn)示例

    希爾排序算法的C語言實現(xiàn)示例

    這篇文章主要介紹了希爾排序算法的C語言實現(xiàn)示例,希爾排序可以看作為一種高級的插入排序,需要的朋友可以參考下
    2016-04-04
  • 用c語言實現(xiàn)和平精英的完整代碼

    用c語言實現(xiàn)和平精英的完整代碼

    這篇文章主要介紹了用c語言實現(xiàn)和平精英的完整代碼,本文給大家介紹的非常詳細,對大家的學習或工作具有一定的參考借鑒價值,需要的朋友可以參考下
    2021-04-04
  • 增加Vscode引用路徑的解決方法(2種)

    增加Vscode引用路徑的解決方法(2種)

    在嵌入式開發(fā)中需要經(jīng)常用到庫函數(shù), Vscode需要配置引用路徑,本文主要介紹了增加Vscode引用路徑的解決方法,具有一定的參考價值,感興趣的可以了解一下
    2024-02-02
  • C++ Vector用法深入剖析

    C++ Vector用法深入剖析

    C++ Vector應用方式是比較特殊的,我們將會在這篇文章中針對于它的應用方式進行一個詳細的介紹,希望大家能充分掌握這一應用技巧
    2014-08-08
  • C++中的三種繼承public,protected,private詳細解析

    C++中的三種繼承public,protected,private詳細解析

    我們已經(jīng)知道,在基類以private方式被繼承時,其public和protected成員在子類中變?yōu)閜rivate成員。然而某些情況下,需要在子類中將一個或多個繼承的成員恢復其在基類中的訪問權限
    2013-09-09
  • 利用C語言實現(xiàn)“百馬百擔”問題方法示例

    利用C語言實現(xiàn)“百馬百擔”問題方法示例

    百馬百擔是道經(jīng)典的算法題,下面這篇文章主要給大家介紹了利用C語言實現(xiàn)“百馬百擔”問題的相關資料,文中通過示例代碼介紹的非常詳細,需要的朋友可以參考借鑒,下面隨著小編來一起學習學習吧。
    2017-12-12
  • C++連接mysql數(shù)據(jù)庫的兩種方法小結

    C++連接mysql數(shù)據(jù)庫的兩種方法小結

    這篇文章主要介紹了C++連接mysql數(shù)據(jù)庫的兩種方法小結,文中通過示例代碼介紹的非常詳細,對大家的學習或者工作具有一定的參考學習價值,需要的朋友們下面隨著小編來一起學習學習吧
    2020-04-04
  • 最短時間學會基于C++實現(xiàn)DFS深度優(yōu)先搜索

    最短時間學會基于C++實現(xiàn)DFS深度優(yōu)先搜索

    常見使用深度優(yōu)先搜索(DFS)以及廣度優(yōu)先搜索(BFS)這兩種搜索,今天我們就來講講什么是深度優(yōu)先搜索,感興趣的可以了解一下
    2021-08-08
  • OpenCV使用稀疏光流實現(xiàn)視頻對象跟蹤的方法詳解

    OpenCV使用稀疏光流實現(xiàn)視頻對象跟蹤的方法詳解

    這篇文章主要為大家詳細介紹了OpenCV如何使用稀疏光流實現(xiàn)視頻對象跟蹤功能,文中的示例代碼講解詳細,具有一定的借鑒價值,需要的可以參考一下
    2023-02-02
  • C++ QT智能指針的使用詳解

    C++ QT智能指針的使用詳解

    這篇文章主要介紹了C++ QT智能指針的使用,Qt是一個跨平臺的C++框架,主要用來開發(fā)圖形用戶界面程序,也可以開發(fā)不帶界面的命令行程序,下面我們來了解QT智能指針是如何使用的
    2023-12-12

最新評論