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

基于easyx的C++實現(xiàn)貪吃蛇

 更新時間:2020年07月27日 14:58:57   作者:haohulala  
這篇文章主要為大家詳細介紹了基于easyx的C++實現(xiàn)貪吃蛇,文中示例代碼介紹的非常詳細,具有一定的參考價值,感興趣的小伙伴們可以參考一下

本文實例為大家分享了基于easyx的C++實現(xiàn)貪吃蛇的具體代碼,供大家參考,具體內(nèi)容如下

本代碼來自于easyx討論群的分享

先上效果圖,其實也只是畫了簡單的圈圈代表蛇和食物,背景就是黑色的。

#include "stdafx.h"
#include <iostream>
#include <stdlib.h>
#include <time.h>
#include <conio.h>
#include <graphics.h>
 
#define N 100
 
using namespace std;
 
enum moved { UP, DOWN, LEFT, RIGHT };
class Snake {
private:
 struct {   //整條蛇的信息
 int x;
 int y;
 }snake[100];
 struct {
 int life;  //為1代表還活著,為0代表已經(jīng)死了
 int length; //代表蛇的長度,初始值為3
 enum moved direction;  //前進方向
 }snake_head;
 struct {    //食物的信息
 int x;
 int y;
 }food;
public:
 void display();  //顯示界面
 void initSnake(); //隨機生成蛇
 void move();//蛇移動
 void boundary_check();//邊界判斷
 void _food();//生成食物
 int food_eatcheck();//檢查是否吃到食物,吃到則返回1,否則返回0
 int snake_eat();//判斷貪吃蛇是否咬到自己,咬到則返回1,否則返回0
 void run();   //主要運行函數(shù)
};
void Snake::display() {
 initgraph(800, 600);
 setbkcolor(WHITE);  //設(shè)置背景顏色為白色
 cleardevice();    //將背景顏色刷新到窗口上
 setfillcolor(BLACK); //設(shè)置填充的顏色為黑色,之后話填充的圖形都是這個顏色
 solidrectangle(20, 560, 560, 20);//這個區(qū)域每20*20為一個單位,一共有27*27個單位
}
//構(gòu)造函數(shù)
void Snake::initSnake() {
 srand((unsigned)time(NULL));
 //因為一開始蛇是向右走的,所以不能讓蛇初始化在太靠右邊的地方
 int x = rand() % 22 + 3; //范圍是3-24
 int y = rand() % 22 + 3; //加三是因為初始的長度是3,必須讓整條蛇都在范圍內(nèi)
 this->snake[0].x = x * 20 + 10;//加十是因為要確定圓心的位置
 this->snake[0].y = y * 20 + 10;
 //默認蛇一開始是橫著的所以三段的y坐標相同
 this->snake[1].y = this->snake[2].y = this->snake[0].y;
 this->snake[1].x = this->snake[0].x - 20;
 this->snake[2].x = this->snake[0].x - 40;
 setfillcolor(GREEN);  //設(shè)置填充色為綠色
 solidcircle(this->snake[0].x, this->snake[0].y, 10); //畫圓
 solidcircle(this->snake[1].x, this->snake[1].y, 10);
 solidcircle(this->snake[2].x, this->snake[2].y, 10);
 this->snake_head.length = 3;
 this->snake_head.life = 1;
 this->snake_head.direction = RIGHT;
}
void Snake::move() {
 char ch;
 if (_kbhit()) {  //如果有輸入的話就返回1,沒有輸入的話就返回0
 ch = _getch();//獲取輸入的字符
 switch (ch) {
  case 'w' :if (this->snake_head.direction != DOWN) this->snake_head.direction = UP; break;
  case 'W':if (this->snake_head.direction != DOWN) this->snake_head.direction = UP; break;
  case 's' :if (this->snake_head.direction != UP) this->snake_head.direction = DOWN; break;
  case 'S':if (this->snake_head.direction != UP) this->snake_head.direction = DOWN; break;
  case 'a':if (this->snake_head.direction != RIGHT) this->snake_head.direction = LEFT; break;
  case 'A':if (this->snake_head.direction != RIGHT) this->snake_head.direction = LEFT; break;
  case 'd':if (this->snake_head.direction != LEFT) this->snake_head.direction = RIGHT; break;
  case 'D':if (this->snake_head.direction != LEFT) this->snake_head.direction = RIGHT; break;
  default:break;
 }
 }
 //將蛇尾變成黑色
 int i = this->snake_head.length - 1;
 setfillcolor(BLACK);
 solidcircle(snake[i].x, snake[i].y, 10);
 //接下來遍歷每個身體,每個身體都更新為前一個身體,蛇頭除外
 for (; i > 0; i--) {
 this->snake[i].x = this->snake[i - 1].x;
 this->snake[i].y = this->snake[i - 1].y;
 }
 switch (this->snake_head.direction) {
 case RIGHT:this->snake[0].x += 20; break;
 case LEFT:this->snake[0].x -= 20; break;
 case UP:this->snake[0].y -= 20; break;
 case DOWN:this->snake[0].y += 20; break;
 default:break;
 }
 setfillcolor(GREEN);
 solidcircle(this->snake[0].x, this->snake[0].y, 10);//繪制蛇頭
 Sleep(1000);
}
void Snake::boundary_check() {
 if (this->snake[0].x <= 30 || this->snake[0].x >= 550 || this->snake[0].y <= 30 || this->snake[0].y >= 550) {
 this->snake_head.life = 0; 
 }
}
void Snake::_food() {
 srand((unsigned)time(NULL));
 int x = rand() % 21 + 3;  //范圍是3-23
 int y = rand() % 21 + 3;
 this->food.x = x * 20 + 10;
 this->food.y = y * 20 + 10;
 setfillcolor(YELLOW);
 solidcircle(this->food.x, this->food.y, 10);
}
int Snake::food_eatcheck() {
 if (this->snake[0].x == this->food.x && this->snake[0].y == this->food.y) {
 //如果滿足條件就是吃到食物了
 this->snake_head.length++;//長度加一
 setfillcolor(GREEN);
 solidcircle(food.x, food.y, 10);
 int k = this->snake_head.length;
 //吃到食物之后最后要在尾巴處加一個長度
 switch (this->snake_head.direction) {
  case RIGHT:this->snake[k - 1].x = this->snake[k - 2].x - 20; this->snake[k - 1].y = this->snake[k - 2].y; break;
  case LEFT:this->snake[k - 1].x = this->snake[k - 2].x += 20; this->snake[k - 1].y = this->snake[k - 2].y; break;
  case UP:this->snake[k - 1].x = this->snake[k - 2].x; this->snake[k - 1].y = this->snake[k - 2].y + 20; break;
  case DOWN:this->snake[k - 1].x = this->snake[k - 2].x; this->snake[k - 1].y = this->snake[k - 2].y - 20; break;
  default:break;
 }
 setfillcolor(GREEN);
 solidcircle(this->snake[k - 1].x, this->snake[k - 1].y, 10);
 return 1;
 }
 return 0;
}
int Snake::snake_eat() {
 int i;
 for (i = 1; i < this->snake_head.length; i++) {
 if (this->snake[i].x == this->snake[0].x && this->snake[i].y == this->snake[0].y) {
  return 1;
 }
 }
 return 0;
}
void Snake::run() {
 display(); //顯示游戲界面
 initSnake();
 _food();  //生成第一個食物
 while (true) {
 move();  //蛇移動
 if (snake_eat() == 1) {
  //自己吃到自己了,游戲失敗
  cout << "自己吃到自己了,游戲失敗" << endl;
  break;
 }
 boundary_check();//判斷是否撞墻
 if (this->snake_head.life == 0) {
  //撞墻了
  cout << "撞墻了,游戲結(jié)束" << endl;
  break;
 }
 if (food_eatcheck() == 1) {
  _food(); //吃到食物就重新生成一個食物
 }
 }
}
 
int main() {
 Snake s;
 s.run();
 return 0;
}

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

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

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

python俄羅斯方塊游戲集合

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

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

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

相關(guān)文章

  • 一篇文章帶你用C語言玩轉(zhuǎn)結(jié)構(gòu)體

    一篇文章帶你用C語言玩轉(zhuǎn)結(jié)構(gòu)體

    本文主要介紹C語言 結(jié)構(gòu)體的知識,學(xué)習(xí)C語言肯定需要學(xué)習(xí)結(jié)構(gòu)體,這里詳細說明了結(jié)構(gòu)體并附示例代碼,供大家參考學(xué)習(xí),有需要的小伙伴可以參考下
    2021-09-09
  • C語言函數(shù)棧幀的創(chuàng)建和銷毀詳解

    C語言函數(shù)棧幀的創(chuàng)建和銷毀詳解

    這篇文章主要為大家詳細介紹了C語言函數(shù)棧幀的創(chuàng)建和銷毀,文中示例代碼介紹的非常詳細,具有一定的參考價值,感興趣的小伙伴們可以參考一下,希望能夠給你帶來幫助
    2022-02-02
  • C語言指針應(yīng)用簡單實例

    C語言指針應(yīng)用簡單實例

    這篇文章主要介紹了C語言指針應(yīng)用簡單實例的相關(guān)資料,需要的朋友可以參考下
    2017-05-05
  • QT中對話框的使用示例詳解

    QT中對話框的使用示例詳解

    這篇文章主要為大家詳細介紹了Qt中對話框的使用,以及QMessageBox類中常見函數(shù)的使用,文中的示例代碼講解詳細,感興趣的小伙伴可以學(xué)習(xí)一下
    2022-11-11
  • C/C++項目編譯工具簡單介紹

    C/C++項目編譯工具簡單介紹

    我們給大家?guī)砹艘黄P(guān)于C/C++項目編譯工具簡單介紹的文章,大家在項目編譯前可以先閱讀下。
    2019-12-12
  • C++讀寫Excel的實現(xiàn)方法詳解

    C++讀寫Excel的實現(xiàn)方法詳解

    本篇文章是對C++讀寫Excel的實現(xiàn)方法進行了詳細的分析介紹,需要的朋友參考下
    2013-05-05
  • 實例講解C++編程中的虛函數(shù)與虛基類

    實例講解C++編程中的虛函數(shù)與虛基類

    這篇文章主要介紹了C++編程中的虛函數(shù)與虛基類的實例講解,虛函數(shù)與虛基類的使用是C++入門學(xué)習(xí)中的基礎(chǔ)知識,需要的朋友可以參考下
    2016-02-02
  • C語言實現(xiàn)控制臺五子棋小游戲

    C語言實現(xiàn)控制臺五子棋小游戲

    這篇文章主要為大家詳細介紹了C語言實現(xiàn)控制臺五子棋小游戲,文中示例代碼介紹的非常詳細,具有一定的參考價值,感興趣的小伙伴們可以參考一下
    2021-07-07
  • 從頭學(xué)習(xí)C語言之指針和數(shù)組

    從頭學(xué)習(xí)C語言之指針和數(shù)組

    這篇文章主要為大家詳細介紹了C語言之指針和數(shù)組,文中示例代碼介紹的非常詳細,具有一定的參考價值,感興趣的小伙伴們可以參考一下,希望能夠給你帶來幫助
    2022-01-01
  • C++解決回調(diào)地獄問題的方法小結(jié)

    C++解決回調(diào)地獄問題的方法小結(jié)

    “地獄回調(diào)”(Callback Hell)是指在編程中使用過多嵌套回調(diào)函數(shù),導(dǎo)致代碼難以閱讀和維護,本文給大家介紹了C++解決回調(diào)地獄問題的方法小結(jié),文中有相關(guān)的代碼示例供大家參考,需要的朋友可以參考下
    2024-07-07

最新評論

广饶县| 洪雅县| 化隆| 潼关县| 韶关市| 溆浦县| 白朗县| 义乌市| 治县。| 金阳县| 鞍山市| 五指山市| 张家口市| 葫芦岛市| 霍山县| 蓬莱市| 宁德市| 淄博市| 普安县| 陇川县| 军事| 河间市| 青冈县| 新密市| 新郑市| 蕲春县| 泸溪县| 靖远县| 桓仁| 广宁县| 扎囊县| 广元市| 马山县| 上饶市| 深圳市| 定安县| 宜君县| 文昌市| 寻乌县| 兴城市| 敦煌市|