400字范文,内容丰富有趣,生活中的好帮手!
400字范文 > C语言学习:简单的小游戏 走迷宫 推箱子

C语言学习:简单的小游戏 走迷宫 推箱子

时间:2021-03-16 04:56:57

相关推荐

C语言学习:简单的小游戏 走迷宫 推箱子

目录

一、走迷宫分析:

走迷宫代码展示

二、推箱子分析:

推箱子代码展示

一、走迷宫分析:

数据分析:

1、定义二维字符数组作为迷宫地图

2、定义变量记录角色的位置 x y

3、时间:time(NULL) 获取1970-1-1到运行时过了总秒数

逻辑分析:

进入死循环:

1、显示地图

2、判断是否到达出口

如果是:程序结束

3、获取方向键并处理

判断前方是不是路' '

如果是:

1、把旧位置变成' '

2、把新位置变成'@'

3、更新角色位置坐标 x y

走迷宫代码展示

#include <stdio.h>#include <getch.h>#include <stdlib.h>#include <time.h>int main(int argc,const char* argv[]){char maze[10][10] = {{'#','#','#','#','#','#','#','#','#','#'},{'#',' ','#','#','#','#','#','#','#','#'},{'#','@','#','#','#','#','#','#','#','#'},{'#',' ','#','#','#','#','#','#','#','#'},{'#',' ','#','#','#','#','#','#','#','#'},{'#',' ','#',' ',' ',' ',' ','#','#','#'},{'#',' ','#',' ','#','#',' ','#','#','#'},{'#',' ','#',' ','#','#',' ','#','#','#'},{'#',' ',' ',' ','#','#',' ',' ',' ',' '},{'#','#','#','#','#','#','#','#','#','#'},};//记录角色位置char man_x = 2,man_y = 1;//记录游戏开始时间time_t start_time = time(NULL);for(;;){//清理屏幕system("clear");//显示地图for(int i=0; i<10; i++){for(int j=0; j<10; j++){printf("%c ",maze[i][j]);}printf("\n");}//判断是否到达出口if(8 == man_x && 9 == man_y){printf("游戏胜利,过了%lu秒!\n",time(NULL)-start_time);return 0;}//获取方向键处理switch(getch()){case 183://向上if(' ' == maze[man_x-1][man_y]){maze[man_x][man_y] = ' ';maze[--man_x][man_y] = '@';}break;case 184://下if(' ' == maze[man_x+1][man_y]){maze[man_x][man_y] = ' ';maze[++man_x][man_y] = '@';}break;case 186://左if(' ' == maze[man_x][man_y-1]){maze[man_x][man_y] = ' ';maze[man_x][--man_y] = '@';}break;case 185://右if(' ' == maze[man_x][man_y+1]){maze[man_x][man_y] = ' ';maze[man_x][++man_y] = '@';}break;}}}

二、推箱子分析:

数据分析:

1、使用数值来表示对应地图点位情况,确定数值与字符的对应关系

0 ' ' 路

1 '@' 人

2 '#' 墙

3 '$' 箱子

4 'O' 目标点

5 '@' 人站目标点

7 '$' 箱站目标点

2、定义8*8整数地图并初始化

3、定义记录角色位置的变量 x y

4、定义记录步数的变量

逻辑分析:

进入死循环

1、清理屏幕、显示地图

if(0 == map[i][j]) printf(" ");

2、判断是否游戏胜利

3、获取方向键并处理

1、前方是路/目标点,参考走迷宫

前方 +1

原位置 -1

更新坐标

2、前方是箱子

箱子的前方是路\目标点

人前方的前方 +3

人前方-3+1

人原位置 -1

更新坐标

推箱子代码展示

#include <stdio.h>#include <stdlib.h>#include <getch.h>int main(int argc,const char* argv[]){char map[8][8] = {{0,0,2,2,2,2,0,0},{0,0,2,4,4,2,0,0},{0,2,2,0,4,2,2,0},{0,2,0,0,3,4,2,0},{2,2,0,3,0,0,2,2},{2,0,0,2,3,3,0,2},{2,0,0,1,0,0,0,2},{2,2,2,2,2,2,2,2}};char man_x = 6,man_y = 3;int step = 0;for(;;){int count = 0;system("clear");for(int i=0; i<8; i++){for(int j=0; j<8; j++){switch(map[i][j]){case 0:printf(" ");break;case 1:printf("@ ");break;case 2:printf("# ");break;case 3:printf("$ ");break;case 4:printf("O ");break;case 5:printf("@ ");break;case 7:printf("$ "); count++; break;}}printf("\n");}if(4 == count){printf("游戏胜利!\n");return 0;}switch(getch()){case 183:if(0 == map[man_x-1][man_y] ||4 == map[man_x-1][man_y]){map[man_x-1][man_y] += 1;map[man_x--][man_y] -= 1;}else if(3 == map[man_x-1][man_y] || 7 == map[man_x-1][man_y]){if(0 == map[man_x-2][man_y] || 4 == map[man_x-2][man_y]){map[man_x-2][man_y] += 3;map[man_x-1][man_y] -= 2;map[man_x--][man_y] -= 1;}}break;case 184:if(0 == map[man_x+1][man_y] ||4 == map[man_x+1][man_y]){map[man_x+1][man_y] += 1;map[man_x++][man_y] -= 1;}else if(3 == map[man_x+1][man_y] || 7 == map[man_x+1][man_y]){if(0 == map[man_x+2][man_y] || 4 == map[man_x+2][man_y]){map[man_x+2][man_y] += 3;map[man_x+1][man_y] -= 2;map[man_x++][man_y] -= 1;}}break;case 186:if(0 == map[man_x][man_y-1] ||4 == map[man_x][man_y-1]){map[man_x][man_y-1] += 1;map[man_x][man_y--] -= 1;}else if(3 == map[man_x][man_y-1] || 7 == map[man_x][man_y-1]){if(0 == map[man_x][man_y-2] || 4 == map[man_x][man_y-2]){map[man_x][man_y-2] += 3;map[man_x][man_y-1] -= 2;map[man_x][man_y--] -= 1;}}break;case 185:if(0 == map[man_x][man_y+1] ||4 == map[man_x][man_y+1]){map[man_x][man_y+1] += 1;map[man_x][man_y++] -= 1;}else if(3 == map[man_x][man_y+1] || 7 == map[man_x][man_y+1]){if(0 == map[man_x][man_y+2] || 4 == map[man_x][man_y+2]){map[man_x][man_y+2] += 3;map[man_x][man_y+1] -= 2;map[man_x][man_y++] -= 1;}}break;}}}

本内容不代表本网观点和政治立场,如有侵犯你的权益请联系我们处理。
网友评论
网友评论仅供其表达个人看法,并不表明网站立场。