如何用纯C语言基于控制台,打造一款可以操控小人的游戏!

本案例是我闲着没事时候做的,我只是初学,所以可能会代码不够好!请大家谅解!!

  • 项目目标

  1. 我这有一个项目图片可以参考下
  • 本项目要求

  1. 要有可以控制小人行走的功能!
  2. 要有碰到边界就回到本行起点功能(如果碰到本列起点一样!)
  3. 要显示当前人物共行走的步数!
  4. 要显示当前人物坐标!
  5. 如果时间充裕可以写个当前日期系统并安装在里面!
  • 本项目初步探索

  1. 本项目基本共分为三大方法
  2. start()方法
  3. 按键监听move()方法

  4. 地图移动规则,MapMoveRule()  (如果人物移出地图则怎么样!)

  5. 初始化方法Init()

虽然方法看似很多其实主要就两个,一个为start()方法另一个为move()方法

  • 项目逻辑

  1. 前面说了项目的一些方法下面我们细细的分解下吧!

1.地图可以用int型数组和char型数组来储存(其实这样有点效率低,如果项目程序大会有卡的现象,但现在无所谓!)

//定义地图(数字版)
int map_i[MAPWIDTH][MAPHEIGHT];
//定义地图(字符版)
char map_c[MAPWIDTH][MAPHEIGHT];

2.方向键我用以下几个宏完成

//定义方向键
#define UP 119
#define DOWN 115
#define LEFT 97
#define RIGHT 100

3.下面就是地图方块的定义

//地图的方块
char  GROUND='*';
char PEOPLE='O';

4.人物坐标和行走的步数

//定义人物坐标
int x=0,y=0;
//人物行走步数
int StepNum=0;

5. 方法的定义

//初始化地图
void Init();
//start开始方法
void start();
//移动方法
void move(int ch);
//地图移动规则
void MapMoveRule();

 6.主方法内一直循环,所以要用while方法

//主方法
int main(){
	system("CHCP 65001");
	system("cls");
	Init();
	while(1){
		start();
	}
	return 0;
}

7.初始化方法(也就是重置方法)

//定义初始化地图方法
void Init(){
	int i;
	int j;
	for(i=0;i<MAPWIDTH;i++){
		for(j=0;j<MAPHEIGHT;j++){
			map_i[i][j]=0;
		}
	}
	map_i[x][y]=1;
	
}

8.开始方法

//定义方法
void start(){
	
	printf("\t------------------------------------------\n");
	printf("\t\t\t请移动人物!\n");
	printf("\t------------------------------------------\n");
	
	int i;
	int j;
	for(i=0;i<MAPWIDTH;i++){
		for(j=0;j<MAPHEIGHT;j++){
			if(map_i[i][j]==0){
				map_c[i][j]=GROUND;
			}else if(map_i[i][j]==1){
				map_c[i][j]=PEOPLE;
			}
			
			printf("   %c ",map_c[i][j]);
		}
		printf("\n");
	}
	struct mydate today = Today(  );
	printf("当前时间:%4d/%02d/%02d:",today.year,today.month,today.day);
	printf("当前人物共行走%d步!\n",StepNum);
	printf("当前人物坐标 x:%d y:%d",x,y);
	int ch;
	ch=getch();
	//移动
	move(ch);
	StepNum++;
	MapMoveRule();
	//刷新
	Init();
	system("cls");
}

9.按键监听

//up 119 down 115 left 97 right 100
//按键监听
void move(int ch){
	
	switch(ch){
		case UP:
		system("color 3f");
			x--;
			break;
		case DOWN:
		system("color 5f");
			x++;
			break;	
		case LEFT:
		system("color 4d");
			y--;
			break;
		case RIGHT:
		system("color 2f");
			y++;
			break;
	}
}

10.人物在地图内移动规则

//地图移动规则
void MapMoveRule(){
	if(x<0){
		x=MAPWIDTH-1;
		
	}
	if(y<0){
		y=MAPHEIGHT-1;
	}
	if(x>MAPWIDTH-1){
		x=0;
		
	}
	if(y>MAPHEIGHT-1){
		y=0;
	}
	
}
  • 总结

本项目只是基于控制台制作的,如果你学习了GUI编程,就可以制作一个漂亮的界面了,无非就是换个界面,其实内部逻辑都一样!

 

下面是学习群:

老九学堂修仙飞天65群:591839161

C/C++交流群:231662552

博主的群:

编程聊天室 855129987(目前没人)

所以提前进群可以给管理员身份!(点击进群)​​​​​​​

posted @ 2020-01-01 22:23  ModuleCode  阅读(1564)  评论(0)    收藏  举报