C语言实践之推箱子游戏思路与代码
2017-08-31 09:17
639 查看
直入正题
推箱子的基本实现思路就是
1.首先绘制一个地图
有箱子,人,目的地,墙
2.实现人的基本移动
3.实现人推箱子和箱子与目的地重合
首先是1
绘制地图就用二维Int数组就好,不同的数代表不同的东西
2 用kbhit()函数检测按键 然后若有方向键按下则改变数组中的数字重新绘制地图
3 人移动时检测前方物体 是箱子或者是墙 决定是否移动
代码如下
#include<stdio.h>
#include<stdlib.h>
#include<windows.h>
#include<conio.h>
void DrawMap(int map[10][12]);
void checkkb();
int a=0,b=0;
int count = 0;//分数0
int gmap[10][12]={
{0,0,0,1,1,1,0,0,0,0,0,0},
{0,0,0,1,3,1,0,0,0,0,0,0},
{0,0,0,1,0,1,1,1,1,1,1,1},
{1,1,1,1,4,0,4,0,0,0,3,1},
{1,3,0,0,4,2,1,1,1,1,1,1},
{1,1,1,1,1,4,1,0,0,0,0,0},
{0,0,0,0,1,0,1,0,0,0,0,0},
{0,0,0,0,1,0,1,0,0,0,0,0},
{0,0,0,0,1,3,1,0,0,0,0,0},
{0,0,0,0,1,1,1,0,0,0,0,0}};//1代表墙 2代表人 3代表目标位置 4代表箱子
int main(){
//设置窗口大小
system("mode con cols=80 lines=25");
//设置窗口标题
SetConsoleTitleA("推箱子");
while(1){
system("cls");//清屏
p
4000
rintf(" 推箱子游戏\n");
checkkb();
DrawMap(gmap);
printf("分数:%d\n",count);
printf("坐标:<%d,%d>\n",a+1,b+1);
_sleep(50);
}
return 0;
}
void DrawMap(int map[10][12]){
for(int i=0;i<10;i++){
for(int j=0;j<12;j++){
switch(map[i][j]){
case 0:
printf(" ");//画道路
break;
case 1:
printf("█");//画墙
break;
case 3:
printf("&&");//画目的地
break;
case 2:
printf("♂");//画小人
a=i;b=j;
break;
case 4:
printf("□");//画箱子
break;
case 5:
printf("★");//箱子和目的地重合
break;
}
}
printf("\n");
}
}
void checkkb(){
if(kbhit()){
char c = getch();
switch(c){
case 72://上
switch(gmap[a-1][b]){
case 0://路
gmap[a][b]=0;
gmap[a-1][b]=2;
break;
case 4://箱子
if(gmap[a-2][b]==3){//是目的地
gmap[a][b]=0;
gmap[a-2][b]=5;
gmap[a-1][b]=2;
count++;
break;
}
if(gmap[a-2][b]!=1){//不是墙
gmap[a][b]=0;
gmap[a-2][b]=4;
gmap[a-1][b]=2;
}
break;
}
break;
case 80://下
switch(gmap[a+1][b]){
case 0://路
gmap[a][b]=0;
gmap[a+1][b]=2;
break;
case 4://箱子
if(gmap[a+2][b]==3){//是目的地
gmap[a][b]=0;
gmap[a+2][b]=5;
gmap[a+1][b]=2;
count++;
break;
}
if(gmap[a+2][b]!=1){//不是墙
gmap[a][b]=0;
gmap[a+2][b]=4;
gmap[a+1][b]=2;
}
break;
}
break;
case 75://左
switch(gmap[a][b-1]){
case 0://路
gmap[a][b]=0;
gmap[a][b-1]=2;
break;
case 4://箱子
if(gmap[a][b-2]==3){//是目的地
gmap[a][b]=0;
gmap[a][b-2]=5;
gmap[a][b-1]=2;
count++;
break;
}
if(gmap[a][b-2]!=1){//不是墙
gmap[a][b]=0;
gmap[a][b-2]=4;
gmap[a][b-1]=2;
}
break;
}
break;
case 77://右
switch(gmap[a][b+1]){
case 0://路
gmap[a][b]=0;
gmap[a][b+1]=2;
break;
case 4://箱子
if(gmap[a][b+2]==3){//是目的地
gmap[a][b]=0;
gmap[a][b+2]=5;
gmap[a][b+1]=2;
count++;
break;
}
if(gmap[a][b+2]!=1){//不是墙
gmap[a][b]=0;
gmap[a][b+2]=4;
gmap[a][b+1]=2;
}
break;
}
break;
}
}
}
代码显得有些罗嗦 比较笔者初学者 请多多见谅!
推箱子的基本实现思路就是
1.首先绘制一个地图
有箱子,人,目的地,墙
2.实现人的基本移动
3.实现人推箱子和箱子与目的地重合
首先是1
绘制地图就用二维Int数组就好,不同的数代表不同的东西
2 用kbhit()函数检测按键 然后若有方向键按下则改变数组中的数字重新绘制地图
3 人移动时检测前方物体 是箱子或者是墙 决定是否移动
代码如下
#include<stdio.h>
#include<stdlib.h>
#include<windows.h>
#include<conio.h>
void DrawMap(int map[10][12]);
void checkkb();
int a=0,b=0;
int count = 0;//分数0
int gmap[10][12]={
{0,0,0,1,1,1,0,0,0,0,0,0},
{0,0,0,1,3,1,0,0,0,0,0,0},
{0,0,0,1,0,1,1,1,1,1,1,1},
{1,1,1,1,4,0,4,0,0,0,3,1},
{1,3,0,0,4,2,1,1,1,1,1,1},
{1,1,1,1,1,4,1,0,0,0,0,0},
{0,0,0,0,1,0,1,0,0,0,0,0},
{0,0,0,0,1,0,1,0,0,0,0,0},
{0,0,0,0,1,3,1,0,0,0,0,0},
{0,0,0,0,1,1,1,0,0,0,0,0}};//1代表墙 2代表人 3代表目标位置 4代表箱子
int main(){
//设置窗口大小
system("mode con cols=80 lines=25");
//设置窗口标题
SetConsoleTitleA("推箱子");
while(1){
system("cls");//清屏
p
4000
rintf(" 推箱子游戏\n");
checkkb();
DrawMap(gmap);
printf("分数:%d\n",count);
printf("坐标:<%d,%d>\n",a+1,b+1);
_sleep(50);
}
return 0;
}
void DrawMap(int map[10][12]){
for(int i=0;i<10;i++){
for(int j=0;j<12;j++){
switch(map[i][j]){
case 0:
printf(" ");//画道路
break;
case 1:
printf("█");//画墙
break;
case 3:
printf("&&");//画目的地
break;
case 2:
printf("♂");//画小人
a=i;b=j;
break;
case 4:
printf("□");//画箱子
break;
case 5:
printf("★");//箱子和目的地重合
break;
}
}
printf("\n");
}
}
void checkkb(){
if(kbhit()){
char c = getch();
switch(c){
case 72://上
switch(gmap[a-1][b]){
case 0://路
gmap[a][b]=0;
gmap[a-1][b]=2;
break;
case 4://箱子
if(gmap[a-2][b]==3){//是目的地
gmap[a][b]=0;
gmap[a-2][b]=5;
gmap[a-1][b]=2;
count++;
break;
}
if(gmap[a-2][b]!=1){//不是墙
gmap[a][b]=0;
gmap[a-2][b]=4;
gmap[a-1][b]=2;
}
break;
}
break;
case 80://下
switch(gmap[a+1][b]){
case 0://路
gmap[a][b]=0;
gmap[a+1][b]=2;
break;
case 4://箱子
if(gmap[a+2][b]==3){//是目的地
gmap[a][b]=0;
gmap[a+2][b]=5;
gmap[a+1][b]=2;
count++;
break;
}
if(gmap[a+2][b]!=1){//不是墙
gmap[a][b]=0;
gmap[a+2][b]=4;
gmap[a+1][b]=2;
}
break;
}
break;
case 75://左
switch(gmap[a][b-1]){
case 0://路
gmap[a][b]=0;
gmap[a][b-1]=2;
break;
case 4://箱子
if(gmap[a][b-2]==3){//是目的地
gmap[a][b]=0;
gmap[a][b-2]=5;
gmap[a][b-1]=2;
count++;
break;
}
if(gmap[a][b-2]!=1){//不是墙
gmap[a][b]=0;
gmap[a][b-2]=4;
gmap[a][b-1]=2;
}
break;
}
break;
case 77://右
switch(gmap[a][b+1]){
case 0://路
gmap[a][b]=0;
gmap[a][b+1]=2;
break;
case 4://箱子
if(gmap[a][b+2]==3){//是目的地
gmap[a][b]=0;
gmap[a][b+2]=5;
gmap[a][b+1]=2;
count++;
break;
}
if(gmap[a][b+2]!=1){//不是墙
gmap[a][b]=0;
gmap[a][b+2]=4;
gmap[a][b+1]=2;
}
break;
}
break;
}
}
}
代码显得有些罗嗦 比较笔者初学者 请多多见谅!
相关文章推荐
- C语言-推箱子游戏代码
- 用js写“算24”游戏的思路分析与实现代码
- 《C语言及程序设计》实践项目——数字游戏
- 黑马程序员——C基础---推箱子游戏的代码实现
- C语言实现推箱子游戏
- C语言+二维数组+非递归实现扫雷游戏(代码贴过来后无缩进,尽请谅解,工程完成度:85%)
- 【C语言】迷宫游戏设计思路与功能体会及简单的改进报告
- 关于贪吃蛇游戏(包括一些我的一些编写思路,代码比较全,比较完整)
- 推箱子游戏代码 求大佬找错
- 基于C语言实现的扫雷游戏代码
- Cocos2d-x手机游戏开发与项目实践详解_随书代码
- Simon游戏代码(C语言)
- 推箱子游戏代码
- C语言---迷宫游戏 代码
- 推箱子游戏代码
- 基于C语言实现的迷宫游戏代码
- 关于 如何实践kernel/driver/u-boot ,怎么样按照作者的思路实现自己的代码
- c语言迷宫游戏代码
- C语言实现聊天工具钟的抖动窗口功能,代码很简单,思路也很简单
- C语言实现推箱子游戏