用 Dev-C++ 编写简单的走迷宫小游戏

用 Dev-C++ 编写简单的走迷宫小游戏

前言

以下是显示效果
显示效果
B站视频讲解:【小游戏】用 Dev-C++ 编写简单的控制台走迷宫小游戏

【小游戏】用 Dev-C++ 编写简单的控制台走迷宫小游戏

基础版

# 代表墙
用 空格 代表空地
O 代表玩家

地图存储:a[x][y]
以下是代码:

#include <cstdio>
#include <windows.h>
#include <conio.h>
//8*12
char a[50][50]={"############",
				"#O#    #   #",
				"#   ## # # #",
				"#####    # #",
				"#     #### #",
				"# #####  # #",
				"#       ##  ",
				"############"};

int main()
{
	int x=1,y=1;
	char ch;
	for(int i=0;i<=7;i++)
		puts(a[i]);
	while(1)
	{
		ch=getch();
        if(ch=='s')//下
        {
			if(a[x+1][y]==' ')
            {
				a[x][y]=' ';
                x++;
                a[x][y]='O';
            }
        }
        else if(ch=='w')//上
        {
			if(a[x-1][y]==' ')
            {
				a[x][y]=' ';
                x--;
                a[x][y]='O';
            }
        }
		else if(ch=='a')//左
        {
			if(a[x][y-1]==' ')
            {
				a[x][y]=' ';
                y--;
                a[x][y]='O';
            }
        }
        else if(ch=='d')//右
        {
			if(a[x][y+1]==' ')
            {
				a[x][y]=' ';
                y++;
                a[x][y]='O';
            }
        }
        system("cls");
		for(int i=0;i<=7;i++)
			puts(a[i]);
        if(x==6 && y==11)
        	break;
	}
	printf("你赢了!");
	Sleep(10000);
	return 0;
}

优化版

以下有些函数的使用方法可以看看其他人的博客

#include <cstdio>
#include <windows.h>
#include <conio.h>
//8*12
char a[50][50]={"############",
				"#O#    #   #",
				"#   ## # # #",
				"#####    # #",
				"#     #### #",
				"# #####  # #",
				"#       ##  ",
				"############"};

void Hide()//用于隐藏控制台光标 
{
	HANDLE				hOut;
	CONSOLE_CURSOR_INFO	curInfo;
	
	hOut=GetStdHandle(STD_OUTPUT_HANDLE); 
	curInfo.dwSize=1;
	curInfo.bVisible=0;
	SetConsoleCursorInfo(hOut,&curInfo);
}

void Welcome()//欢迎界面 
{
    printf("\n\n           走 迷 宫");
    printf("\n\n        请按任意键开始");
    getch();
    system("cls");
}

void Set()//设置光标到初始位置 
{
	HANDLE hOut;
	COORD pos={0,0};
	hOut=GetStdHandle(STD_OUTPUT_HANDLE);
	SetConsoleCursorPosition(hOut,pos); 
}

int main()
{
	Hide();
	Welcome();
	int x=1,y=1;
	char ch;
	for(int i=0;i<=7;i++)
		puts(a[i]);
	while(1)
	{
		ch=getch();
        if(ch=='s')//下
        {
			if(a[x+1][y]==' ')
            {
				a[x][y]=' ';
                x++;
                a[x][y]='O';
            }
        }
        else if(ch=='w')//上
        {
			if(a[x-1][y]==' ')
            {
				a[x][y]=' ';
                x--;
                a[x][y]='O';
            }
        }
		else if(ch=='a')//左
        {
			if(a[x][y-1]==' ')
            {
				a[x][y]=' ';
                y--;
                a[x][y]='O';
            }
        }
        else if(ch=='d')//右
        {
			if(a[x][y+1]==' ')
            {
				a[x][y]=' ';
                y++;
                a[x][y]='O';
            }
        }
        Set();
		for(int i=0;i<=7;i++)
			puts(a[i]);
        if(x==6 && y==11)
        	break;
	}
	printf("你赢了!");
	Sleep(10000);
	return 0;
}
  • 26
    点赞
  • 127
    收藏
    觉得还不错? 一键收藏
  • 11
    评论
以下是使用Dev-C++编写贪吃蛇的基本步骤: 1. 创建一个新的C++项目,并命名为“贪吃蛇”。 2. 在项目中创建一个新的C++源文件,并将其命名为“main.cpp”。 3. 在“main.cpp”文件中,包含必要的头文件和命名空间: ``` #include <iostream> #include <conio.h> #include <windows.h> using namespace std; ``` 4. 定义贪吃蛇和食物的结构体: ``` struct Snake{ int x, y; }; struct Food{ int x, y; }; ``` 5. 定义全局变量和常量: ``` const int mapWidth = 20; const int mapHeight = 20; const int snakeMaxLen = 100; const int interval = 100; int direction = 0; int score = 0; int snakeLen = 3; Snake snake[snakeMaxLen]; Food food; ``` 6. 初始游戏窗口和贪吃蛇的初始位置: ``` void init(){ system("mode con cols=40 lines=25");//设置窗口大小 srand((unsigned)time(NULL));//初始随机数种子 snake[0].x = 10; snake[0].y = 10; snake[1].x = 9; snake[1].y = 10; snake[2].x = 8; snake[2].y = 10; food.x = rand() % mapWidth; food.y = rand() % mapHeight; } ``` 7. 定义绘制函数,用于绘制游戏界面: ``` void draw(){ system("cls");//清屏 for(int i = 0; i < mapHeight; i++){ for(int j = 0; j < mapWidth; j++){ if(i == 0 || i == mapHeight - 1 || j == 0 || j == mapWidth - 1){ cout << "#";//绘制边框 }else if(i == snake[0].y && j == snake[0].x){ cout << "H";//绘制蛇头 }else if(i == food.y && j == food.x){ cout << "*";//绘制食物 }else{ bool isBody = false; for(int k = 1; k < snakeLen; k++){ if(i == snake[k].y && j == snake[k].x){ cout << "o";//绘制蛇身 isBody = true; break; } } if(!isBody){ cout << " ";//绘制空格 } } } cout << endl; } cout << "Score: " << score << endl;//显示得分 } ``` 8. 定义移动函数,用于控制贪吃蛇的移动: ``` void move(){ for(int i = snakeLen - 1; i > 0; i--){ snake[i].x = snake[i - 1].x; snake[i].y = snake[i - 1].y; } switch(direction){ case 0://向上移动 snake[0].y--; break; case 1://向下移动 snake[0].y++; break; case 2://向左移动 snake[0].x--; break; case 3://向右移动 snake[0].x++; break; } } ``` 9. 定义碰撞检测函数: ``` bool check(){ if(snake[0].x == 0 || snake[0].x == mapWidth - 1 || snake[0].y == 0 || snake[0].y == mapHeight - 1){ return true;//撞到边界 } for(int i = 1; i < snakeLen; i++){ if(snake[0].x == snake[i].x && snake[0].y == snake[i].y){ return true;//撞到自己 } } if(snake[0].x == food.x && snake[0].y == food.y){ score += 10;//吃到食物 snakeLen++; food.x = rand() % mapWidth; food.y = rand() % mapHeight; } return false; } ``` 10. 在主函数中,循环执行绘制、移动和碰撞检测等操作: ``` int main(){ init(); while(true){ if(_kbhit()){ char ch = _getch(); switch(ch){ case 'w'://向上移动 if(direction != 1){ direction = 0; } break; case 's'://向下移动 if(direction != 0){ direction = 1; } break; case 'a'://向左移动 if(direction != 3){ direction = 2; } break; case 'd'://向右移动 if(direction != 2){ direction = 3; } break; } } move(); if(check()){ cout << "Game Over!" << endl; break; } draw(); Sleep(interval);//延迟 } return 0; } ``` 11. 编译并运行程序,即可开始游戏

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 11
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值