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

貪吃蛇游戲C++命令行版實例代碼

 更新時間:2014年09月16日 11:21:28   投稿:shichen2014  
這篇文章主要介紹了貪吃蛇游戲C++命令行版實例代碼,包含了常見的循環(huán)語句及相關游戲規(guī)則的判定方法,有助于更好的理解游戲設計原理,需要的朋友可以參考下

本文實例講述了貪吃蛇游戲C++命令行版的實現(xiàn)代碼,是非常經典的游戲。分享給大家供大家參考。具體實現(xiàn)方法如下:

眾所周知,貪吃蛇游戲是經典的計算機游戲。

游戲描述如下:

1. 貪吃蛇可以自動直線前進,或者玩家可以通過方向鍵操縱貪吃蛇上下左右前進,每次前進一格。
2. 貪吃蛇在規(guī)定的區(qū)域內活動,當:

①貪吃蛇觸碰到墻壁時;

②貪吃蛇的蛇頭觸碰到蛇身或者蛇尾時;

③玩家的鍵盤輸入不是方向鍵時;

命令行顯示“Game Over!”并且退出游戲。

3. 貪吃蛇活動的區(qū)域內每次隨機產生一顆“豆豆”,當貪吃蛇吃到“豆豆”后蛇身增長一格,自動前進時間縮 短100ms(默認是1000ms,且不能少于100ms)。貪吃蛇長度每為8的倍數(shù)Improve a Level。

C++代碼如下:

#include <bios.h>
#include <conio.h>
#include <dos.h>
#include <graphics.h>
#include <stdlib.h>
#include <time.h>
using namespace std;

inline void display(char gsDomain[][22], int level, int moveSpeed)
{
system("cls"); //清屏
cout << endl << endl;
for (int i = 0; i < 22; i++)
{
cout << "\t";
for (int j = 0; j < 22; j++)
cout << gsDomain[i][j] << " ";
if (i == 0)
{
cout << "\tLevel:" << level;
}
else if (i == 3)
{
cout << "\t自動前進時間";
}
else if (i == 5)
{
cout << "\t間隔:" << moveSpeed << " ms";
}

cout << endl;
}
}

int main()
{
char gsDomain[22][22]; //貪吃蛇活動區(qū)域(包括墻壁)
//初始化貪吃蛇活動區(qū)域(不包括墻壁)
for (int i = 1; i <= 21; i++)
{
for (int j = 1; j <= 21; j++)
gsDomain[i][j] = ' ';
}
//初始化貪吃蛇活動區(qū)域的上下墻壁
for (int i = 0; i < 22; i++)
gsDomain[0][i] = gsDomain[21][i] = '-';
//初始化貪吃蛇活動區(qū)域的左右墻壁
for (int i = 1; i < 21; i++)
gsDomain[i][0] = gsDomain[i][21] = '|';
//初始化蛇身
for (int i = 1; i <= 3; i++)
gsDomain[1][i] = '*';
//初始化蛇頭
gsDomain[1][4] = '#';

int snake[2][100]; //記錄貪吃蛇每次出現(xiàn)的位置的坐標
for (int i = 0; i < 4; i++)
{
snake[0][i] = 1; //記錄貪吃蛇所在位置的x坐標
snake[1][i] = i + 1; //記錄貪吃蛇所在位置的y坐標
}
int head = 3, tail = 0, length = 4;

int beanX, beanY; //豆豆出現(xiàn)的位置
srand(time(0));
do
{
beanX = rand() % 20 + 1;
beanY = rand() % 20 + 1;
} while (gsDomain[beanX][beanY] != ' ');
gsDomain[beanX][beanY] = '*'; //豆豆

cout << "\n\n\t\t貪吃蛇游戲即將開始!\n";
long start;
int level = 1, moveSpeed = 1000;
for (int i = 3; i >= 0; i--)
{
start = clock();
while (clock() - start <= 1000){}
system("cls");
if (i)
{
cout << "\n\n\t\t進入游戲倒計時:" << i << endl;
}
else
display(gsDomain, level, moveSpeed);
}

char direction = 77; //貪吃蛇默認自動向右直線前進
while (true)
{
bool timeFlag = true;
int x, y;
start = clock();

//若時間超過自動前進時間或者鍵盤上有鍵按下則終止循環(huán)
while ((timeFlag = (clock() - start <= moveSpeed)) && !kbhit()){}

if (timeFlag)
{
//鍵盤上有鍵按下時讀取鍵盤輸入
getch();
direction = getch();
}

switch (direction)
{
//向上
case 72: x = snake[0][head] - 1, y = snake[1][head];
break;
//向下
case 80: x = snake[0][head] + 1, y = snake[1][head];
break;
//向左
case 75: x = snake[0][head], y = snake[1][head] - 1;
break;
//向右
case 77: x = snake[0][head], y = snake[1][head] + 1;
break;
default: cout << "\tGame Over!\n";
return 0;
}

if (x == 0 || x == 21 || y == 0 || y == 21)
{
//貪吃蛇觸碰到墻壁
cout << "\tGame Over!\n";
return 0;
}

if (gsDomain[x][y] != ' ' && !(x == beanX && y == beanY))
{
//貪吃蛇的蛇頭觸碰到蛇身或者蛇尾
cout << "\tGame Over!\n";
return 0;
}

if (x == beanX && y == beanY)
{
//吃豆豆
length++; //長度加1
if (length >= 8)
{
//游戲升級處理
length -= 8;
level++;
if (moveSpeed > 100)
moveSpeed -= 100;
}
gsDomain[snake[0][head]][snake[1][head]] = '*';
gsDomain[x][y] = '#';
head = (head + 1) % 100;
snake[0][head] = x;
snake[1][head] = y;
do
{
beanX = rand() % 20 + 1;
beanY = rand() % 20 + 1;
} while (gsDomain[beanX][beanY] != ' ');
gsDomain[beanX][beanY] = '*';

display(gsDomain, level, moveSpeed); //屏幕上顯示
}
else
{
//不吃豆豆
gsDomain[snake[0][tail]][snake[1][tail]] = ' '; //蛇尾前移一格
tail = (tail + 1) % 100;
gsDomain[snake[0][head]][snake[1][head]] = '*';
head = (head + 1) % 100;
snake[0][head] = x;
snake[1][head] = y;
gsDomain[x][y] = '#'; //蛇頭前移一格
display(gsDomain, level, moveSpeed); //屏幕上顯示
}
}

return 0;
}

希望本文所述實例對大家C程序設計的學習有所幫助。

相關文章

  • 利用C/C++實現(xiàn)貪吃蛇游戲

    利用C/C++實現(xiàn)貪吃蛇游戲

    這篇文章主要為大家詳細介紹了利用C/C++實現(xiàn)貪吃蛇游戲,文中示例代碼介紹的非常詳細,具有一定的參考價值,感興趣的小伙伴們可以參考一下
    2021-10-10
  • C++中delete和delete[]的區(qū)別

    C++中delete和delete[]的區(qū)別

    這篇文章主要介紹了C++中delete和delete[]的區(qū)別的相關資料,需要的朋友可以參考下
    2016-03-03
  • C++設計模式編程中使用Bridge橋接模式的完全攻略

    C++設計模式編程中使用Bridge橋接模式的完全攻略

    這篇文章主要介紹了C++設計模式編程中使用Bridge橋接模式的完全攻略,Bridge將抽象部分與它的實現(xiàn)部分分離,使它們都可以獨立地變化需要的朋友可以參考下
    2016-03-03
  • 基于MFC實現(xiàn)類的序列化詳解

    基于MFC實現(xiàn)類的序列化詳解

    序列化是將程序中的對象以一種二進制格式存儲到存儲設備中(例如文本/數(shù)據(jù)庫等),以實現(xiàn)“永生”或隨意“流動”。本文將為大家詳細講講如何基于MFC實現(xiàn)類的序列化,需要的可以參考一下
    2022-07-07
  • 深入分析C++派生類中的保護成員繼承

    深入分析C++派生類中的保護成員繼承

    這篇文章主要介紹了C++派生類中的保護成員繼承,深入對C++面向對象編程的繼承機制進行了解析,需要的朋友可以參考下
    2015-09-09
  • C語言中條件判斷的正確使用姿勢

    C語言中條件判斷的正確使用姿勢

    在C語言中,有三種條件判斷結構:if語句、if-else語句和switch語句,這篇文章主要來和大家講解一下它們的正確使用姿勢,需要的可以參考一下
    2023-05-05
  • C語言之結構體(struct)詳解

    C語言之結構體(struct)詳解

    本文主要介紹C語言 結構體的知識,學習C語言肯定需要學習結構體,這里詳細說明了結構體并附示例代碼,供大家參考學習,有需要的小伙伴可以參考下
    2021-10-10
  • C語言實現(xiàn)分治法實例

    C語言實現(xiàn)分治法實例

    這篇文章主要為大家詳細介紹了C語言實現(xiàn)分治法的實例,具有一定的參考價值,感興趣的小伙伴們可以參考一下
    2018-08-08
  • 一篇文章帶你了解C語言:入門基礎(2)

    一篇文章帶你了解C語言:入門基礎(2)

    這篇文章主要介紹了C語言入門之基礎知識詳解,文中有非常詳細的C語言使用教程及相關基礎知識,對正在學習c語言的小伙伴們有非常好的幫助,需要的朋友可以參考下
    2021-08-08
  • C++實現(xiàn)類似延時停頓的打字效果

    C++實現(xiàn)類似延時停頓的打字效果

    這篇文章主要介紹的是使用C++實現(xiàn)類似延時停頓的打字效果的代碼,非常的簡單,推薦給大家,有需要的小伙伴可以參考下。
    2015-03-03

最新評論