如何用C++编写一个小游戏

如题所述

一个用C++编程的小游戏,可以实现的功能如下:

1、随机生成数字;

2、数字消除合并;

3、判定游戏结束;

一、游戏主体: 

因为用C++写的,所以用了类,棋盘用了一个二维数组,m是棋盘规格,取了4。

class game

{

public:

    int i, j;

    game() {

        count1 = 0;

        for (i = 0; i < m; i++)

            for (j = 0; j < m; j++)

                chessboard[i][j] = 0;

        srand((unsigned)time(NULL));

        x = rand() % m;

        y = rand() % m;

        if (count1 == 1 || count1 == 0)

            chessboard[x][y] = 2;

        else

            chessboard[x][y] = 4;

        showchessboard();

    }//构造初始棋盘

    void add(int count1);//新增数字

    void showchessboard();//显示棋盘

    void up();

    void down();

    void left();

    void right();

    bool gameover();//游戏失败

private:

    int chessboard[m][m];

    int x, y, count1, count2, temp1, temp2, k;//c1-连消,c2-空位标记,t1-判连消,t2,k-临时变量

    bool flag;//判消

};

二、随机生成数字

void game::add(int count1)

{

    for (i = 0; i < m; i++)

        for (j = 0; j < m; j++)

        {

            if (chessboard[i][j] == 0)

                goto loop;

        }

    showchessboard();

    return;

loop:srand((unsigned)time(NULL));

    do {

        x = rand() % m;

        y = rand() % m;

    } while (chessboard[x][y] != 0);

    if (count1 < 2)

        chessboard[x][y] = 2;

    else

        chessboard[x][y] = 4;

    showchessboard();

}

三、数字消除合并

void game::up()

{

    temp1 = count1;

    flag = false;

    for (j = 0; j < m; j++)

        for (i = 0; i < m;)

        {

            for (; i < 4 && chessboard[i][j] == 0; i++); // 找非零值

            if (i == 4)

                break;

            else

            {

                for (k = i + 1; k < 4 && chessboard[k][j] == 0; k++);//找下一个非零值

                if (k == 4)

                    break;

                else if (chessboard[i][j] == chessboard[k][j])//匹配

                {

                    chessboard[i][j] *= 2;

                    chessboard[k][j] = 0;

                    i = k + 1;

                    flag = true;

                }

                else if (chessboard[i][j] != chessboard[k][j] && k < 4)//不匹配

                {

                    i = k;

                }

            }

        }

    for (j = 0; j < m; j++)//排列棋盘

        for (i = 0, count2 = 0; i < m; i++)

        {

            if (chessboard[i][j] != 0)

            {

                temp2 = chessboard[i][j];

                chessboard[i][j] = 0;

                chessboard[count2][j] = temp2;

                count2++;

            }

        }

}

四、判断游戏结束

bool game::gameover()

{

    if (flag)

        count1++;//判连消

    if (temp1 == count1)

        count1 = 0;//未消除,连消归零

    add(count1);

    for (i = m - 1, j = 0; j < m; j++)//最后一行

    {

        if (j == m - 1)//右下角

        {

            if (chessboard[i][j] == 0)

                return false;

            else if (chessboard[i][j] == 2048)

            {

                cout << "You Win~\n";

                return true;

            }

        }

        else

        {

            if (chessboard[i][j] == 0 || chessboard[i][j] == chessboard[i][j + 1])

                return false;

            else if (chessboard[i][j] == 2048)

            {

                cout << "You Win~\n";

                return true;

            }

        }

    }

    for (i = 0, j = m - 1; i < m; i++)//最后一列

    {

        if (i == m - 1)//右下角

        {

            if (chessboard[i][j] == 0)

                return false;

            else if (chessboard[i][j] == 2048)

            {

                cout << "You Win~\n";

                return true;

            }

        }

        else

        {

            if (chessboard[i][j] == 0 || chessboard[i][j] == chessboard[i + 1][j])

                return false;

            else if (chessboard[i][j] == 2048)

            {

                cout << "You Win~\n";

                return true;

            }

        }

    }

    for (i = 0; i < m - 1; i++)

        for (j = 0; j < m - 1; j++)

        {

            if (chessboard[i][j] == 2048)

            {

                cout << "You Win!\n";

                return true;

            }

            else if (chessboard[i][j] == chessboard[i][j + 1] || chessboard[i][j] == chessboard[i + 1][j] || chessboard[i][j] == 0)

                return false;

        }

    cout << "Game over.\n";

    return true;

}

扩展资料:

C++语言的程序因为要体现高性能,所以都是编译型的。但其开发环境,为了方便测试,将调试环境做成解释型的。

生成程序是指将源码(C++语句)转换成一个可以运行的应用程序的过程。如果程序的编写是正确的,那么通常只需按一个功能键,即可搞定这个过程。但是该过程实际上分成两个步骤。

第一步是对程序进行编译,这需要用到编译器(compiler)。编译器将C++语句转换成机器码(也称为目标码);

第二步就是对程序进行链接,这需要用到链接器(linker)。链接器将编译获得机器码与C++库中的代码进行合并。C++库包含了执行某些常见任务的函数(“函数”是子程序的另一种称呼)。

参考资料来源:

百度百科-C++

温馨提示:内容为网友见解,仅供参考
第1个回答  2020-10-22

分享一个大家小时候常玩的小游戏。希望能够喜欢。

第2个回答  推荐于2017-10-07
在百度上看到的一个贪吃蛇游戏
#include<iostream.h>
#include<windows.h>
#include<time.h>
#include<stdlib.h>
#include<conio.h>
#define N 21
void gotoxy(int x,int y)//位置函数
{
COORD pos;
pos.X=2*x;
pos.Y=y;
SetConsoleCursorPosition(GetStdHandle(STD_OUTPUT_HANDLE),pos);
}
void color(int a)//颜色函数
{
SetConsoleTextAttribute(GetStdHandle(STD_OUTPUT_HANDLE),a);
}
void init(int apple[2])//初始化函数(初始化围墙、显示信息、苹果)
{
int i,j;//初始化围墙
int wall[N+2][N+2]={{0}};
for(i=1;i<=N;i++)
{
for(j=1;j<=N;j++)
wall[i][j]=1;
}
color(11);
for(i=0;i<N+2;i++)
{
for(j=0;j<N+2;j++)
{
if(wall[i][j])
cout<<"■";
else cout<<"□" ;
}
cout<<endl;
}
gotoxy(N+3,1);//显示信息
color(20);
cout<<"按 W S A D 移动方向"<<endl;
gotoxy(N+3,2);
color(20);
cout<<"按任意键暂停"<<endl;
gotoxy(N+3,3);
color(20);
cout<<"得分:"<<endl;
apple[0]=rand()%N+1;//苹果
apple[1]=rand()%N+1;
gotoxy(apple[0],apple[1]);
color(12);
cout<<"●"<<endl;
}
int main()
{
int i,j;
int** snake=NULL;
int apple[2];
int score=0;
int tail[2];
int len=3;
char ch='p';
srand((unsigned)time(NULL));
init(apple);
snake=(int**)realloc(snake,sizeof(int*)*len);
for(i=0;i<len;i++)
snake[i]=(int*)malloc(sizeof(int)*2);
for(i=0;i<len;i++)
{
snake[i][0]=N/2;
snake[i][1]=N/2+i;
gotoxy(snake[i][0],snake[i][1]);
color(14);
cout<<"★"<<endl;
}
while(1)//进入消息循环
{
tail[0]=snake[len-1][0];
tail[1]=snake[len-1][1];
gotoxy(tail[0],tail[1]);
color(11);
cout<<"■"<<endl;
for(i=len-1;i>0;i--)
{
snake[i][0]=snake[i-1][0];
snake[i][1]=snake[i-1][1];
gotoxy(snake[i][0],snake[i][1]);
color(14);
cout<<"★"<<endl;
}
if(kbhit())
{
gotoxy(0,N+2);
ch=getche();
}
switch(ch)
{
case 'w':snake[0][1]--;break;
case 's':snake[0][1]++;break;
case 'a':snake[0][0]--;break;
case 'd':snake[0][0]++;break;
default: break;
}
gotoxy(snake[0][0],snake[0][1]);
color(14);
cout<<"★"<<endl;
Sleep(abs(200-0.5*score));
if(snake[0][0]==apple[0]&&snake[0][1]==apple[1])//吃掉苹果后蛇分数加1,蛇长加1
{
score++;
len++;
snake=(int**)realloc(snake,sizeof(int*)*len);
snake[len-1]=(int*)malloc(sizeof(int)*2);
apple[0]=rand()%N+1;
apple[1]=rand()%N+1;
gotoxy(apple[0],apple[1]);
color(12);
cout<<"●"<<endl;
gotoxy(N+5,3);
color(20);
cout<<score<<endl;
}
if(snake[0][1]==0||snake[0][1]==N||snake[0][0]==0||snake[0][0]==N)//撞到围墙后失败
{
gotoxy(N/2,N/2);
color(30);
cout<<"Game over"<<endl;
for(i=0;i<len;i++)
free(snake[i]);
Sleep(INFINITE);
exit(0);
}
}
return 0;
}本回答被网友采纳
第3个回答  2021-01-01

使用语言:C++使用工具:vs2019

第4个回答  2020-10-31

猜数字游戏


代码如下:


#include <iostream>
using namespace std;

int main(int argc, char** argv) {
int intMimiNumbers[4];
int intDangqianNumbers[4];
int num;
int intTryTimes = 0;
int intACount;
int intBCount;

cout << "猜数字游戏" << endl;
cout << "请输入4位秘密数字,以空格隔开,按ENTER键确认:";
for(int i = 0; i < 4; i++){
cin >> intMimiNumbers[i];
if ( '\n' == cin.get())
{
break;
}
}

system("CLS");

cout << "猜数字游戏" << endl;
while(1){
cout << "请输入4位猜测的数字, 以空格隔开,按ENTER键确认:";

intDangqianNumbers[0] = 0;
intDangqianNumbers[1] = 0;
intDangqianNumbers[2] = 0;
intDangqianNumbers[3] = 0;
for(int i = 0; i < 4; i++){
cin >> intDangqianNumbers[i];
if ( '\n' == cin.get())
{
break;
}
}

intACount = 0;
intBCount = 0;
for(int iDangqian = 0; iDangqian < 4; iDangqian++)
{
for(int iMimi = 0; iMimi < 4; iMimi++)
{
if(intDangqianNumbers[iDangqian] == intMimiNumbers[iMimi] && iDangqian == iMimi)
{
intACount++;

}

if(intDangqianNumbers[iDangqian] == intMimiNumbers[iMimi] && iDangqian != iMimi)
{
intBCount++;

}
}
}

intTryTimes ++;

cout <<"[" << intTryTimes << "] : "<< intACount << "A" << intBCount << "B" << endl;

if(intACount == 4)
{
cout << "好样的!你猜对了!" << endl;
break;
}
}

return 0;
}

小游戏的C++代码
火脸柴人小游戏的C++代码实现这是一个简单的火脸柴人游戏,游戏规则如下:玩家通过方向键控制蓝色小人移动,避开位于(10, 10)位置的红色老女人。一旦小人与老女人相遇,游戏结束。代码使用C++编写,需要在编译时添加 `-std=c++11` 参数以确保正确编译。以下是关键函数的代码片段:void gotoxy(int x, ...

C语言C++图形库---贪吃蛇大作战【附源码】
首先,创建一个800 * 600的窗体,使用默认坐标系,设置背景色并清空窗体。接着,将窗体水平分隔为20等分,垂直分隔为15等分,构建网格坐标系统。在游戏界面,用5格白色的矩形表示蛇,用黄色的一格矩形表示食物。绘制网格线,水平线从x坐标0至800,垂直线从y坐标0至600,每条线段间隔为40像素,以方便观...

C\/C++游戏项目教程:看完只会说“编译飞机大战太简单了吧”
在VS中打开项目,进入代码编写阶段。我们先创建一个图形窗口,其尺寸应与我们准备的游戏背景图片保持一致。这样做的目的是使游戏画面与实际背景图片无缝融合。紧接着,插入背景图片以营造出游戏环境氛围。同时,添加背景音乐,让游戏更具沉浸感。这一过程包括音乐文件的正确加载以及播放控制逻辑的实现。然后,...

小游戏的C++代码
\/* Compile with the command: g++ -std=c++11 -o game game.cpp *\/ include include include using namespace std;const unsigned char CTRL_KEY = 0XE0;const unsigned char LEFT = 0X4B;const unsigned char RIGHT = 0X4D;const unsigned char DOWN = 0X50;const unsigned char UP = 0X48...

用C\/C++编写小游戏:5.4 光标定位函数gotoxy
在程序中,可以在绘制地图前使用`gotoxy(0, 0)`将光标移动到左上角,避免屏幕内容滚动。若需在Dev-C++中使用`gotoxy`,只需包含`conio.h`头文件即可。若需自定义实现`gotoxy`函数,可以利用Windows API函数,如`SetConsoleCursorPosition`。将此函数放在`main`函数上方,然后在绘制地图前调用`gotoxy(0...

小游戏的C++代码
\/*一个火柴人游戏,亲自验证,可运行*\/ \/*在编译时添加如下命令:-std=c++11,否则会编译错误*\/ include <cstdio> include <cstdlib> include <Windows.h> include <thread> include <conio.h> using namespace std;const unsigned char CTRL_KEY = 0XE0;const unsigned char LEFT = 0X4B;cons...

如何用C++编写一个小游戏
一个用C++编程的小游戏,可以实现的功能如下:1、随机生成数字;2、数字消除合并;3、判定游戏结束;一、游戏主体:因为用C++写的,所以用了类,棋盘用了一个二维数组,m是棋盘规格,取了4。class game { public:int i, j;game() { count1 = 0;for (i = 0; i < m; i++)for (j = ...

用C++编写的小游戏源代码
while (1){ int mode = ChoiceMode();while (1){ if (mode == 1) \/\/电脑vs玩家 { ComputerChess(Pos1,flag1); \/\/ 电脑下棋 if (GetVictory(Pos1, 0, flag1) == 1) \/\/0表示电脑,真表示获胜 break;PlayChess(Pos2, 2, flag2); \/\/玩家2下棋 if (GetVictory(Pos2...

用c++来编写一个小游戏的源代码,要100-200行就可以了,可以再vc环境下运...
bar(a+1, b+1, a+SQ-1, b+SQ-1);} void clearxiao(int &x, int &y){ int a=x*SQ+BX, b=y*SQ+BY;setfillstyle(1, BkCl);bar(a+1, b+1, a+SQ-1, b+SQ-1);} void goleft(int &x, int &y){ if(x>0){ clearxiao(x, y);drawxiao(--x, y);} } void go...

求助用C或者C++语言实现一个迷宫小游戏代码
int i,i1,x=1,y=1,n=12,m=29;char ch;for(i=0;i<=19;i++){ puts(a[i]);} while(x!=n||y!=m){ ch=getch();if(ch==115||ch==25){ if(a[x+1][y]!=35){ a[x][y]=32;x++;a[x][y]=111;} } if(ch==119||ch==24){ if(a[x-1][y]!=35){ a[x...

相似回答