DEVc++小游戏集合(共9个)

这篇博客汇总了9个使用DEVc++编写的经典小游戏,包括打怪游戏、扫雷、推箱子、贪吃蛇、猜数字、随机迷宫、斗破苍穹、24点和2048。通过这些游戏,读者可以了解和实践C++编程技巧。
摘要由CSDN通过智能技术生成

目录

1.打怪游戏

2.扫雷游戏

3.推箱子

4.贪吃蛇

5.猜数字

6.随机迷宫

7.斗破苍穹

8.24点

9.2048


1.打怪游戏

#include<bits/stdc++.h>
#include<conio.h>
#include<windows.h>
using namespace std;
double shanghai[20]={0.6,1.1,2,3.16,5.5,7,10,20,50,100,146.23,254.13,312,403,601,1023};
double bosshealth[20]={2,3,4,5.9,8,14,19,32,73,157,200,403,801,1200,3630,20123};
double wj_shanghai=1,wj_health=10,wj_max_health=10,boss,wj_money;
void chushihua();
void game();
void gongji();
void goumai();
void shangdian();
void zhujiemian();
void fangyu();
void cend();
void chushou();
void print(char[]);
int bishou=0,caidao=0,jian=0,shenjian=0;
double bishou_1=5,caidao_1=17,jian_1=58,shenjian_1=123.1;
int hat=0,douhui=0,hudun=0,hunjia=0,shendun=0;
double hat_1=7,douhui_1=21,hudun_1=49,hunjia_1=89,shendun_1=210.4;
void cend()
{
    system("cls");
    print("GAME OVER");
    exit(1);
}
void game()
{
    int k;
    chushihua();
    IO:
    printf("请输入对手等级 (0~15)\n");
    scanf("%d",&k);
    if(k>15||k<0)
    {
        system("cls");
        goto IO;
    }
    boss=bosshealth[k];
    system("cls");
    while(wj_health>=0)
    {
        srand(time(NULL));
        QP:
        printf("1.逃跑        2.进攻\n");
        char s=getch();
        if(s<'1'||s>'2')
        {
            system("cls");
            goto QP;
        }
        if(s=='1')
        {
            system("cls");
            zhujiemian();
        }
        system("cls");
        double l=shanghai[k]*((rand()%2)+1)+fabs(double(rand()%100/100-2));
        printf("对手对你造成了%lf点伤害\n",l);
        wj_health-=l;
        printf("你当前剩余血量:%lf\n",wj_health);
        if(wj_health<=0)
            cend();
        double o=wj_shanghai*((rand()%2)+1)+double(rand()%10/10);
        boss-=o;
        printf("你对对手造成了%lf点伤害\n",o);
        printf("对手当前剩余血量:%lf\n\n",boss);
        if(boss<=0)
        {
            printf("胜利!\n获得%lf金币\n\n当前剩余血量:%lf\n",shanghai[k]+3,wj_health);
            wj_money+=shanghai[k]+3;
            printf("\n余额:%lf\n",wj_money);
            getch();
            if(k==15)
            {
                printf("恭喜玩家!游戏胜利!\n");
                getch();
                exit(1);
            }
            system("cls");
            zhujiemian();
        }
    }
}
void zhujiemian()
{
    PO:
    printf("1.商店 2.战斗 3.回血 4.状态\n");
    char k=getch();
    if(k>'5'||k<'1')
    {
        system("cls");
        goto PO;
    }
    if(k=='1')
    {
        system("cls");
        shangdian();
        return;
    }
    if(k=='2')
    {
        system("cls");
        game();
        return;
    }
    if(k=='3')
    {
        system("cls");
        if(wj_money>0)
        {
            wj_money=wj_money*4/5-1;
            chushihua();
            wj_health=wj_max_health;
            printf("回血成功!\n");
            getch();
            system("cls");
            goto PO;
        }
        else
        {
            printf("余额不足!\n");
            getch();
            system("cls");
            goto PO;
        }
    }
    if(k=='4')
    {
        chushihua(); 
        system("cls");
        printf("生命值:%lf\n",wj_health);
        printf("最大生命值:%lf\n",wj_max_health);
        printf("攻击力:%lf\n",wj_shanghai);
        printf("金币:%lf\n",wj_money); 
        getch();
        system("cls");
        goto PO;
    }
    if(k=='5')
    {
        string a;
        system("cls");
        printf("输入密码!\n");
        cin>>a;
        if(a=="songyudashuaibi"||a=="PI"||a=="14588")
        {
            wj_money+=1000;
            printf("外挂生效\n");
            Sleep(1000);
            system("cls");
            goto PO;
        }
        printf("外挂失败\n");
        Sleep(1000);
        system("cls");
        goto PO;
    }
}
void shangdian()
{
    LK:
    printf("1.购买 2.返回主界面\n");
    char k=getch();
    if(k!='1'&&k!='2')
    {
        system("cls");
        goto LK;
    }
    if(k=='1')
    {
        system("cls");
        goumai();
        goto LK;
    }
    if(k=='2')
    {
        system("cls");
        zhujiemian();
        return;
    }
}
void goumai()
{
    ML:
    printf("1.攻击 2.防御 3.返回主界面\n");
    char k=getch();
    if(k!='1'&&k!='2'&&k!='3')
    {
        system("cls");
        goto ML;
    }
    if(k=='1')
    {
        system("cls");
        gongji();
        goto ML;
    }
    if(k=='3')
    {
        system("cls");
        zhujiemian();
        return;
    }
    if(k=='2')
    {
        fangyu();
    }
} 
void gongji()
{
    OP:
    system("cls");
    printf("0.返回上界面\n");
    printf("1.返回主界面\n");
    printf("2.匕首 5金币\n");
    printf("3.菜刀 17金币\n");
    printf("4.剑 68金币\n");
    printf("5.圣剑 210金币\n");
    printf("提醒:金币价格与伤害成正比\n");
    char k=getch();
    if(k<'0'||k>'5')
    {
        system("cls");
        goto OP;
    }
    if(k=='0')
    {
        system("cls");
        goumai();
        return;
    }
    if(k=='1')
    {
        system("cls");
        zhujiemian();
        return;
    }
    if(k=='2')
    {
        if(wj_money>=bishou_1)
        {
            chushihua();
            system("cls");
            wj_money-=bishou_1;
            bishou++;
            goto OP;
        }
        system("cls");
        printf("余额不足!\n");
        getch();
        system("cls");
        goto OP;
    }
    if(k=='3')
    {
        if(wj_money>=caidao_1)
        {
            chushihua();
            system("cls");
            wj_money-=caidao_1;
            caidao++;
            goto OP;
        }
        system("cls");
        printf("余额不足!\n");
        getch();
        goto OP;
    }
    if(k=='4')
    {
        if(wj_money>=jian_1)
        {
            chushihua();
            system("cls");
            wj_money-=jian_1;
            jian++;
            goto OP;
        }
        system("cls");
        printf("余额不足!\n");
        getch();
        goto OP;
    }
    if(k=='5')
    {
        if(wj_money>=shenjian_1)
        {
            chushihua();
            system("cls");
            wj_money-=shenjian_1;
            shenjian++;
            goto OP;
        }
        system("cls");
        printf("余额不足!\n");
        getch();
        goto OP;
    }
}
void fangyu()
{
    OP:
    system("cls");
    printf("0.返回上界面\n");
    printf("1.返回主界面\n");
    printf("2.绿帽子 7金币\n");
    printf("3.头盔 21金币\n");
    printf("4.护盾 49金币\n");
    printf("5.盔甲 89金币\n");
    printf("6.圣盾 210金币\n");
    printf("提醒:金币价格与伤害成正比\n");
    char k=getch();
    if(k<'0'||k>'6')
    {
        system("cls");
        goto OP;
    }
    if(k=='0')
    {
        system("cls");
        goumai();
        return;
    }
    if(k=='1')
    {
        system("cls");
        zhujiemian();
        return;
    }
    if(k=='2')
    {
        if(wj_money>=hat_1)
        {
            chushihua();
            system("cls");
            wj_money-=hat_1;
            hat++;
            goto OP;
        }
        system("cls");
        printf("余额不足!\n");
        getch();
        system("cls");
        goto OP;
    }
    if(k=='3')
    {
        if(wj_money>=douhui_1)
        {
            chushihua();
            system("cls");
            wj_money-=douhui_1;
            douhui++;
            goto OP;
        }
        system("cls");
        printf("余额不足!\n");
        getch();
        goto OP;
    }
    if(k=='4')
    {
        if(wj_money>=hudun_1)
        {
            chushihua();
            system("cls");
            wj_money-=hudun_1;
            hudun++;
            goto OP;
        }
        system("cls");
        printf("余额不足!\n");
        getch();
        goto OP;
    }
    if(k=='5')
    {
            chushihua();
        if(wj_money>=hunjia_1)
        {
            system("cls");
            wj_money-=hunjia_1;
            hunjia++;
            goto OP;
        }
        system("cls");
        printf("余额不足!\n");
        getch();
        goto OP;
    }
    if(k=='6')
    {
        if(wj_money>=shendun_1)
        {
            chushihua();
            system("cls");
            wj_money-=shendun_1;
            shendun++;
            goto OP;
        }
        system("cls");
        printf("余额不足!\n");
        getch();
        goto OP;
    }
}
void chushihua()
{
    wj_max_health=hat*hat_1+douhui*douhui_1+hudun*hudun_1+hunjia*hunjia_1+shendun*shendun_1+10;
    wj_shanghai=bishou*bishou_1+caidao*caidao_1+jian*jian_1+shenjian*shenjian_1+1;
}
void print(char a[])
{
    int s=strlen(a);
    for(int i=0;i<s;i++)
    {
        cout<<a[i];
        Sleep(400);
    }
    getch(); 
    system("cls");
}
int main()
{
    system("title game");
    zhujiemian();
    return 0;
}

2.扫雷游戏

#include<stdio.h>
#include<windows.h>
#include<stdlib.h>
#include<time.h>
#include<conio.h>
#include<queue>
#include<ctype.h>
#define A 17	//地图的高
#define B 17	//地图的宽
#define C 30	//雷的总数
using namespace std;
 
//全局变量
DWORD a,b;
char map[A][B],news,spare;
int BoomTotalNum,floatx,floaty,flag[A][B],flagnum,mode,slect[A][B],game;
 
//颜色属性
const WORD FORE_BLUE  =  FOREGROUND_BLUE;	//蓝色文本属性
const WORD FORE_GREEN = FOREGROUND_GREEN;	//绿色文本属性
const WORD FORE_RED   =   FOREGROUND_RED;	//红色文本属性
 
//开垦地图结构体 
struct node {
	int x;
	int y;
};
queue <node> dui;
 
//打印位置
void position(int x,int y) {
	COORD pos={x,y};
	HANDLE Out=GetStdHandle(STD_OUTPUT_HANDLE);
	SetConsoleCursorPosition(Out,pos);
}
 
//隐藏光标 
void Hide() {
	HANDLE handle = GetStdHandle(STD_OUTPUT_HANDLE);  
	CONSOLE_CURSOR_INFO CursorInfo;  
	GetConsoleCursorInfo(handle, &CursorInfo);//获取控制台光标信息  
	CursorInfo.bVisible = false; //隐藏控制台光标  
	SetConsoleCursorInfo(handle, &CursorInfo);//设置控制台光标状态   
}
 
//初始化
void Beginning() {
	while(!dui.empty()) {
		dui.pop();
	}
	game=1;
	//BoomTotalNum=C;
	floatx=A/2;
	floaty=B/2;
	flagnum=0;
	BoomTotalNum=C;
	mode=0;
	HANDLE handle_out = GetStdHandle(STD_OUTPUT_HANDLE);    //获得标准输出设备句柄  
    CONSOLE_SCREEN_BUFFER_INFO csbi;                        //定义窗口缓冲区信息结构体  
    GetConsoleScreenBufferInfo(handle_out, &csbi);          //获得窗口缓冲区信息
    int x,y;
	srand((unsigned)time(0));
	for(int i=0;i<A;i++) for(int j=0;j<B;j++) {
		map[i][j]=' ';
		flag[i][j]=0;
		slect[i][j]=0;
	}
	while(BoomTotalNum) {
		x=rand()%A;
		y=rand()%B;
		if(map[x][y]==' ') {
			map[x][y]='@';
			BoomTotalNum--;
		}
	}
	SetConsoleTextAttribute(handle_out, FORE_GREEN);  
	for(int i=0;i<A;i++) {
		for(int j=0;j<B;j++) printf("█");
		printf("\n");
	}
	position(floaty*2,floatx);
	SetConsoleTextAttribute(handle_out, FORE_RED);  
	printf("");	//光标位置
	position(44,9);
	printf("扫雷模式");
	position(44,5);
	printf("剩余雷数:%d ",C-flagnum);
	SetConsoleTextAttribute(handle_out, FORE_GREEN);  
	position(5,22);
	printf("按“空格”切换模式");
	position(5,23);
	printf("按“Enter”确认");
	position(5,24);
	printf("按“方向键”选择方块"); 
	
}
 
//打印地图的一块儿 
void Lump(int xx,int yy) {
	switch(map[xx][yy]) {
		case '1' : printf("①");break;	//周围雷的数量(下同) 
		case '2' : printf("②");break;
		case '3' : printf("③");break;
		case '4' : printf("④");break;
		case '5' : printf("⑤");break;
		case '6' : printf("⑥");break;
		case '7' : printf("⑦");break;
		case '8' : printf("⑧");break;
		case ' ' :
			if(xx==floatx&&yy==floaty) {
				if(flag[xx][yy]==0) {
					if(mode%2==0) printf("");
					else printf("");
				}
				else printf("");
			}
			else {
				if(flag[xx][yy]==0) printf("█");
				else printf("");
			}
			break;
		case '@' :
			if(xx==floatx&&yy==floaty) {
				if(flag[xx][yy]==0) {
					if(mode%2==0) printf("");
					else printf("");
				}
				else printf("");
			}
			else {
				if(flag[xx][yy]==0) printf("█");
				else printf("");
			}
			break;
		case 'x' : if(floatx==xx&&floaty==yy) printf(""); else printf("  ");break;	//已经挖开的空白
	}
}
 
//移动光标
void Move() {
	HANDLE handle_out = GetStdHandle(STD_OUTPUT_HANDLE);    //获得标准输出设备句柄  
    CONSOLE_SCREEN_BUFFER_INFO csbi;                        //定义窗口缓冲区信息结构体  
    GetConsoleScreenBufferInfo(handle_out, &csbi);          //获得窗口缓冲区信息
    int xxx,yyy;
    xxx=floatx;
    yyy=floaty;
	switch(news) {
		case 72 : floatx--;break;	//上 
		case 80 : floatx++;break;	//下 
		case 75 : floaty--;break;	//左 
		case 77 : floaty++;break;	//右 
	}
	if(floatx==-1) floatx=A-1; floatx%=A;	//两端穿模处理 
	if(floaty==-1) floaty=B-1; floaty%=B;
	
	position(yyy*2,xxx);
	SetConsoleTextAttribute(handle_out, FORE_GREEN);
	Lump(xxx,yyy);	//删除原位置
	
	if(map[floatx][floaty]=='x') {
		position(floaty*2,floatx);
		printf("  ");
	}
	
	position(floaty*2,floatx);
	SetConsoleTextAttribute(handle_out, FORE_BLUE);  
	Lump(floatx,floaty);	//更新新位置 
} 
 
//插旗和排雷模式切换 
void Mode() {
	HANDLE handle_out = GetStdHandle(STD_OUTPUT_HANDLE);    //获得标准输出设备句柄  
    CONSOLE_SCREEN_BUFFER_INFO csbi;                        //定义窗口缓冲区信息结构体  
    GetConsoleScreenBufferInfo(handle_out, &csbi);          //获得窗口缓冲区信息
	mode++;
	SetConsoleTextAttribute(handle_out, FORE_BLUE);
	position(floaty*2,floatx);
	if(mode%2==0) printf("");
	else printf("");
	
	position(44,9);
	if(mode%2==0) {
		SetConsoleTextAttribute(handle_out, FORE_BLUE);  
		printf("扫雷模式");
	}
	else {
		SetConsoleTextAttribute(handle_out, FORE_RED);  
		printf("插旗模式");
	}
}
 
//该点周围地雷数 
int Boomnum(int xx,int yy) {
	int num=0;
	if((xx-1>=0)&&(yy-1>=0)&&(map[xx-1][yy-1]=='@')) num++;
	if((xx-1>=0)&&(yy+0>=0)&&(map[xx-1][yy]=='@')) num++;
	if((xx-1>=0)&&(yy+1<B) &&(map[xx-1][yy+1]=='@')) num++;
	if((xx+0>=0)&&(yy-1>=0)&&(map[xx][yy-1]=='@')) num++;
	if((xx+0>=0)&&(yy+1<B) &&(map[xx][yy+1]=='@')) num++;
	if((xx+1<A)&&(yy-1>=0) &&(map[xx+1][yy-1]=='@')) num++;
	if((xx+1<A)&&(yy+0>=0) &&(map[xx+1][yy]=='@')) num++;
	if((xx+1<A)&&(yy+1<B)  &&(map[xx+1][yy+1]=='@')) num++;
	return num;
}
 
//更新地图 
void Open() {
	node c;
	node d;
	while(!dui.empty()) {
		dui.pop();
	}
	c.x=floatx;
	c.y=floaty;
	dui.push(c);
	slect[c.x][c.y]=1;
	while(!dui.empty()) {
		c=dui.front();
		dui.pop();
		if(Boomnum(c.x,c.y)!=0) {
			map[c.x][c.y]=(Boomnum(c.x,c.y)+48);
			continue;
		}
		else {
			map[c.x][c.y]='x';                                                                                                                                                                                                                                                                                                                                                                                                                                     
			if((c.x-1>=0)&&(c.y-1>=0)&&(map[c.x-1][c.y-1]==' ')&&(slect[c.x-1][c.y-1]==0)) {
				d.x=c.x-1;
				d.y=c.y-1;
				dui.push(d);
				slect[d.x][d.y]=1;
			}
			if((c.x-1>=0)&&(c.y-0>=0)&&(map[c.x-1][c.y]==' ')&&(slect[c.x-1][c.y]==0)) {
				d.x=c.x-1;
				d.y=c
  • 5
    点赞
  • 11
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
### 回答1: DevC 是一种集成开发环境(IDE),可用于编写、编译和运行 C 和 C++ 程序。在 DevC 中编写小游戏代码很简单。 首先,您需要创建一个新的 C 文件,用于编写您的小游戏代码。您可以使用 DevC 的代码编辑器来编写代码。接下来,您可以根据您的游戏设计,定义游戏中的变量和函数。例如,您可能需要定义游戏中的玩家位置、分数、障碍物位置等变量,并编写处理用户输入、更新游戏状态和绘制游戏场景的函数。 在编写小游戏代码时,您可以使用 DevC 提供的 API 来实现图形和交互。例如,您可以使用 DevC 的图形库来绘制游戏场景、玩家、障碍物等图形元素,并使用鼠标和键盘事件处理函数来接收用户的操作。 您还可以使用 DevC 的调试功能来调试您的小游戏代码。例如,您可以在代码中设置断点,并逐步执行代码以查看变量的值和程序流程,以帮助您找到和修复错误。 最后,您可以使用 DevC 的编译器将您的小游戏代码编译为可执行文件。您可以选择在 DevC 中直接运行可执行文件,或将其导出到其他平台进行测试和发布。 总之,使用 DevC 编写小游戏代码非常方便。它提供了一个友好的开发环境和一套丰富的功能,帮助您快速开发和调试小游戏,为用户提供更好的游戏体验。 ### 回答2: DevC 是一个可以运行 C 语言程序的集成开发环境(IDE),可以编写和调试 C 语言程序。编写一个小游戏代码可以用 DevC。 以下是一个简单的猜数字游戏代码: ```c #include <stdio.h> #include <stdlib.h> #include <time.h> int main() { int number, guess, attempts = 0; srand(time(0)); number = rand() % 100 + 1; // 随机生成一个 1 到 100 的数字 printf("欢迎来到猜数字游戏!\n"); printf("请输入一个 1 到 100 之间的数字:"); do { scanf("%d", &guess); attempts++; if (guess > number) { printf("猜测的数字太大了!请再次尝试:"); } else if (guess < number) { printf("猜测的数字太小了!请再次尝试:"); } else { printf("恭喜你猜对了!你总猜了 %d 次\n", attempts); } } while (guess != number); return 0; } ``` 这个游戏会生成一个 1 到 100 之间的随机数字,玩家需要通过输入猜测的数字来猜对正确的数字。程序会根据玩家猜测的数字提示玩家猜测的数字是大了还是小了,直到猜对为止。最后会输出玩家猜对的次数。 使用 DevC,可以将以上代码复制粘贴到 DevC 的编辑窗口中,并点击运行按钮来运行程序。程序会在控制台窗口中显示游戏进行的过程和最终的结果。 ### 回答3: DEV-C++ 是一个提供编译器和集成开发环境(IDE)的软件,被广泛用于 C 和 C++开发。它可以用于编写各种应用程序,包括小游戏。下面是一个简单的小游戏代码示例: ``` #include <iostream> #include <cstdlib> #include <ctime> using namespace std; int main() { srand(time(0)); // 设置随机数种子 int randomNumber = rand() % 100 + 1; // 生成1到100之间的随机数 int guess; int attempts = 0; cout << "欢迎参加猜数字游戏!" << endl; do { cout << "请输入一个1到100之间的整数:"; cin >> guess; attempts++; if (guess > randomNumber) { cout << "太大了!" << endl; } else if (guess < randomNumber) { cout << "太小了!" << endl; } else { cout << "恭喜你猜中了!" << endl; cout << "你一猜了 " << attempts << " 次。" << endl; break; // 猜中后结束循环 } } while (true); return 0; } ``` 这个代码示例是一个猜数字的小游戏。玩家需要猜一个随机生成的1到100的数字。如果猜的数字比随机数大,程序会显示"太大了!",如果猜的数字比随机数小,程序会显示"太小了!",如果猜中了,程序会显示"恭喜你猜中了!",并显示玩家猜了多少次。 以上是一个简单的 DEV-C++ 小游戏代码示例。实际上,DEV-C++可以用于编写各种复杂的小游戏和应用程序。开发者可以利用其强大的工具和功能进行创作。
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值