程序師世界是廣大編程愛好者互助、分享、學習的平台,程序師世界有你更精彩!
首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫知識
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
 程式師世界 >> 編程語言 >> C語言 >> C++ >> C++入門知識 >> C++實現的控制台-貪吃蛇,實現控制台貪吃蛇

C++實現的控制台-貪吃蛇,實現控制台貪吃蛇

編輯:C++入門知識

C++實現的控制台-貪吃蛇,實現控制台貪吃蛇


周六終於可以抽出一整段時間了

想了想就寫個貪吃蛇吧    第一次寫 差不多下了140行  也不算太多吧

以後ACM比賽是在做不來就自己打個貪吃蛇玩

ps:本來想寫個項目的 但是為了方便你們閱讀 就寫在一個文件裡面了

測試了下  無重大BUG     但是 功德圓滿 沒有測試

 

 

知識點:

1:刷新窗口 system("cls");

2: time.h 用來編寫時鐘系統;

3:SetConsoleCursorPosition(GetStdHandle(STD_OUTPUT_HANDLE), coord);  重置光標位置,即你想在那裡輸出就把光標移到那個地方輸出就可以了

  開始還有一個思路就是 不用數組存地圖 只用定位光標來  更新蛇  後面發現有點困難

4:其他的就是一些C++的基本語法了 

感興趣的可以拿下去玩玩

貼代碼:

//基礎知識clock_t clock(void)  返回從程序開始到現在為止的時間單位毫秒 CLOCKS_PER_SEC 轉換為秒的單位 相當於1000.0 
/* 打開exe 後輸出普通游戲畫面並在地圖中間提示 按任意鍵開始游戲
*/
#include<iostream>
#include<windows.h>
#include<conio.h>
#include<time.h>
#include<list>
#include<string>
using namespace std;
class  retro_snake
{
private:
    COORD zz;//緩存前進的點用; 
    list<COORD>snake;//保存蛇 
    string ma[15]; //保存游戲畫面 
    int direction; //保存現在蛇的前進方向 
    int grates;
    int level;     //游戲等級 
    int rate;      //游戲速率 
public:
    retro_snake() //初始化游戲 
    {
        level = 0; rate = 800;  grates = 0; direction = 1;
        for (int i = 0; i<15; i++)
        {
            if (i == 0 || i == 14)
                ma[i] = "###################################";//35
            else
                ma[i] = "#                                 #";
        }
        zz.X = 17; zz.Y = 7;
        snake.push_front(zz);
    }
    void draw(void) const//繪畫游戲界面
    {
        for (int i = 0; i<15; i++)
            cout << ma[i] << endl;
        cout << "得分:" << grates << "等級:" << level << endl;
        cout << "w: 上 s:下 a:左 d:右  空格:暫停 " << endl;
    }
    void creat_food()//生成食物
    {
        int x, y;
        do
        {
            x = rand() % 14 + 1;
            y = rand() % 34 + 1;
        } while (ma[x][y] != ' ');
        ma[x][y] = '$';
    }
    void clock_system(void)//時鐘系統 控制游戲進行
    {
        double Start = clock();
        char ch = 'w'; bool flag;//初始化前進方向
        creat_food();
        while (1)
        {
            while ((clock() - Start)<rate && !(flag=_kbhit()));//一秒後自動讀取 或者直接有鍵入 
            Start = clock();
            if (flag)
            {
                ch = _getch();
                int direction_;
                if (ch == ' ')//暫停的功能實現
                {
                    while (!_kbhit());
                    ch = _getch();
                    Start = clock();
                }
                else if (ch == 'r')
                {

                }
                switch (ch)
                {
                case 'w':direction_ = 1; break;
                case 'a':direction_ = 3; break;
                case 's':direction_ = 4; break;
                case 'd':direction_ = 2; break;
                default:direction_ = 0;
                }
                if (direction_ + direction != 5&&direction_!=0) direction = direction_;//如果輸入的方向不和現在前進的方向沖突 就改變
            }
            switch (direction)
            {
            case 1:zz.X = snake.front().X; zz.Y = snake.front().Y - 1; break;
            case 2:zz.X = snake.front().X + 1; zz.Y = snake.front().Y; break;
            case 3:zz.X = snake.front().X - 1; zz.Y = snake.front().Y; break;
            case 4:zz.X = snake.front().X; zz.Y = snake.front().Y + 1; break;
            }
            if (ma[zz.Y][zz.X] == '#' || ma[zz.Y][zz.X] == '.')
            {
                COORD coord; coord.X = 3; coord.Y = 8;
                SetConsoleCursorPosition(GetStdHandle(STD_OUTPUT_HANDLE), coord);
                cout << "游戲結束"; 
                Sleep(300);
                break;
            }
            else if (ma[zz.Y][zz.X] == '$')
            {
                grates++; level = grates / 10; 
                level = min(5, level);
                rate = 800 - level * 100;
                ma[snake.front().Y][snake.front().X] = '.';
                snake.push_front(zz);
                ma[snake.front().Y][snake.front().X] = '@';
                if (snake.size() == 429)
                {
                    COORD coord; coord.X = 3; coord.Y = 8;
                    SetConsoleCursorPosition(GetStdHandle(STD_OUTPUT_HANDLE), coord);
                    cout << "功德圓滿";
                    Sleep(300);
                    break;
                }
                creat_food();
            }
            else
            {
                ma[snake.front().Y][snake.front().X] = '.';
                snake.push_front(zz);
                ma[snake.front().Y][snake.front().X] = '@';
                ma[snake.back().Y][snake.back().X] = ' ';
                snake.pop_back();
            }
            system("cls");
            draw();
        }
    }
    void start(void)
    {
        draw();
        COORD coord; coord.X = 13; coord.Y = 8;
        SetConsoleCursorPosition(GetStdHandle(STD_OUTPUT_HANDLE), coord);
        cout << "按任意鍵開始";
        while (!_kbhit());
            char ch =_getch();
        system("cls");
        draw();
        clock_system();
    }
};
int main()
{
    retro_snake Game;
    Game.start();
    return 0;
}

 

  1. 上一頁:
  2. 下一頁:
Copyright © 程式師世界 All Rights Reserved