C语言版推箱子
推箱子源代码初步:
#include<stdio.h>
#include<conio.h>
#include<stdlib.h>
#define boolean int
#define true 1
#define false 0 #define ROWS 10
//之所以定义为11,是因为字符串的尾部的\0
#define COLUMNS 11 //根据程序定义或者文件读入来构建地图,然后把他绘制到屏幕上
void DrawMap(char map[][COLUMNS]);
void SwapXY(char map[][COLUMNS], int *x1, int *y1, int *x2, int *y2);
boolean IsLose(char map[][COLUMNS], int boxPositionX, int boxPositionY, char condition);
//读取文件中的地图和人物、箱子的位置
void LoadMap(char Map[][COLUMNS], int *boxPositionX, int *boxPositionY, int *manPositionX, int *manPositionY);
//在推箱子的过程中接收用户的输入,然后做出相应的处理
void PushBox(int *boxPositionX, int *boxPositionY, int *manPositionX, int *manPositionY); int main()
{
char wall = '#';
char box = 'X';
char street = ' ';
int boxPositionX,boxPositionY;
int manPositionX,manPositionY; //定义地图的出口,也就是箱子到达此处就赢了
int winPositionX = ROWS -;
int winPositionY = COLUMNS - ; boolean IsWin = false; //int manNextPositionX,manNextPositionY; char Map[ROWS][COLUMNS] =
{
"##########",
"#0 #### #",
"# X#### #",
"# #",
"###### #",
"# #### #",
"# #",
"# ######",
"# ",
"##########"
};
DrawMap(Map);
LoadMap(Map, &boxPositionX, &boxPositionY, &manPositionX, &manPositionY); while(!IsWin)
{
int boxNextPositionX = boxPositionX;
int boxNextPositionY = boxPositionY;
int manNextPositionX = manPositionX;
int manNextPositionY = manPositionY;
//获取用户的输入
PushBox(&boxNextPositionX, &boxNextPositionY, &manNextPositionX, &manNextPositionY);
//
system("CLS"); //这里处理走之后的效果 TODO:
if(Map[boxNextPositionX][boxNextPositionY] == street && Map[manNextPositionX][manNextPositionY] == box)
{
SwapXY(Map,&boxPositionX, &boxPositionY, &boxNextPositionX, &boxNextPositionY);
SwapXY(Map,&manPositionX, &manPositionY, &manNextPositionX, &manNextPositionY); }
if(Map[manNextPositionX][manNextPositionY] == street)
{
SwapXY(Map,&manPositionX, &manPositionY, &manNextPositionX, &manNextPositionY); } DrawMap(Map); if(boxPositionX == winPositionX && boxPositionY == winPositionY)
{
printf("You Are Win!\n");
IsWin = true; }
if(IsLose(Map,boxPositionX, boxPositionY, wall))
{
printf("You Are Lose!\n");
break;
}
}
system("Pause");
return ; } void DrawMap(char map[][COLUMNS])
{
for(int i = ; i < ROWS; i++)
{
printf("%s\n", map[i]);
}
}
void SwapXY(char map[][COLUMNS], int *x1, int *y1, int *x2, int *y2)
{
char temp = map[*x1][*y1];
map[*x1][*y1] = map[*x2][*y2];
map[*x2][*y2] = temp; *x1 = *x2;
*y1 = *y2;
}
boolean IsLose(char map[][COLUMNS], int boxPositionX, int boxPositionY, char condition)
{
if((map[boxPositionX + ][boxPositionY] == condition && map[boxPositionX][boxPositionY - ] == condition)
||(map[boxPositionX - ][boxPositionY] == condition && map[boxPositionX][boxPositionY - ] == condition)
||(map[boxPositionX - ][boxPositionY] == condition && map[boxPositionX][boxPositionY + ] == condition)
||(map[boxPositionX + ][boxPositionY] == condition && map[boxPositionX][boxPositionY + ] == condition)
)
{
return true;
}
return false;
}
void LoadMap(char Map[][COLUMNS], int *boxPositionX, int *boxPositionY, int *manPositionX, int *manPositionY)
{
*boxPositionX = ;
*boxPositionY = ;
*manPositionX = ;
*manPositionY = ;
}
void PushBox(int *boxPositionX, int *boxPositionY, int *manPositionX, int *manPositionY)
{
char direction;
printf("请输入一个方向 [w,a,s,d]分别代表[上下左右]\n\n");
direction = getch();
switch(direction)
{
case 'W':
case 'w':
(*manPositionX)--;
(*boxPositionX)--;
break;
case 'A':
case 'a':
(*manPositionY)--;
(*boxPositionY)--;
break;
case 'S':
case 's':
(*manPositionX)++;
(*boxPositionX)++;
break;
case 'D':
case 'd':
(*manPositionY)++;
(*boxPositionY)++;
break;
default:
break;
//DO NOTHING:
}
}
C语言版推箱子的更多相关文章
- C语言实现推箱子游戏完整代码
C语言实现推箱子游戏完整代码 前言 自己做的,可能有些代码不够工整,或者有些小问题,但游戏的基本操作是可以实现的 代码效果 代码一共分为8个部分,4个控制上下左右移动,2个判断输赢,1个统计归为的个数 ...
- C语言之推箱子游戏代码
前言本文的文字及图片来源于网络,仅供学习.交流使用,不具有任何商业用途,版权归原作者所有,如有问题请及时联系我们以作处理.作者:Yan_Less 正文 新手注意:如果你学习遇到问题找不到人解答,可以点 ...
- C/C++编程笔记:C语言写推箱子小游戏,大一学习C语言练手项目
C语言,作为大多数人的第一门编程语言,重要性不言而喻,很多编程习惯,逻辑方式在此时就已经形成了.这个是我在大一学习 C语言 后写的推箱子小游戏,自己的逻辑能力得到了提升,在这里同大家分享这个推箱子小游 ...
- c语言游戏推箱子
前两天做了推箱子小游戏,看似简单的一个小游戏背后却 有巨大的秘密,这秘密就是一大堆逻辑. 自从学习了函数过后,的确是解决了很多问题,而且调用很方便,尽管我现在都不是很会调用. 写完一个函数,准备测试一 ...
- jQuery版推箱子游戏详解和源码
前言 偶然间看到很多用js写游戏的感觉很炫酷的样子,所以就想试试,就看了一些资料和某前端站点的视屏.于是乎就自己动手实践了一下,上推箱子截图 感觉很丑陋,但是功能是实现了.再说貌似大多都是这样的吧,这 ...
- Java控制台版推箱子
import java.util.Scanner; public class b { public static void main(String[] args) { Scanner input = ...
- C#语言实现推箱子
话不多说直接上代码 using System; namespace Boxer { class Program { const int WIDTH = 8; const int HEIGHT = 8; ...
- C语言小程序——推箱子(窄字符和宽字符)
C语言小程序——推箱子(窄字符Version) 推箱子.c #include <stdio.h> #include <conio.h> #include <stdlib. ...
- 012-C语言小游戏之推箱子
012-C语言小游戏之推箱子 一.创建游戏地图 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 #define ROWS 11 #define COLS 12 char ...
随机推荐
- Vbox 未指定XXX网络名称 找不到网卡问题
链接方式不止Host-Only 我一般选桥连 选择 VBoxNetFltM.inf VBoxNetFltM.inf VirtualBox的桥接网络驱动程序的INF文件(Miniport:端口) VBo ...
- 不使用TNS直连数据库的三种方式
1.在当前目录下新建tnsnames.ora文件 如windows环境下,在C:\Users\Administrator目录下新建tnsnames.ora文件,内容如下:test =(descript ...
- ajax封装
/** * ITCAST WEB * Created by zhousg on 2016/5/24. */ /* * 1. 请求的类型 type get post * 2. 请求地址 url * 3. ...
- Intent组件
Android页面之间的跳转可以分为几类,比如有A和B两个页面,从A页面直接跳转到B页面,这样的跳转比较简单,或者从A页面跳转到B页面但是需要传送数据.在Android中,页面的跳转离不开Intent ...
- How to Install/Deinstall Oracle Workspace Manager (文档 ID 263428.1)
In this Document Goal Solution References APPLIES TO: Workspace Manager - Version 9.0.1.0 to 1 ...
- log4j学习笔记
在java文件中导入包: import org.apache.logging.log4j.LogManager; import org.apache.logging.log4j.Logger; 在所使 ...
- 关于在页面上执行sql语句
在页面上执行sql语句,首先在页面上顶一个文本域,让用户输入需要执行的sql语句. html代码如下: <!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML ...
- 关于jQuery中的ajax的方法介绍
jQuery提供一系列Ajax函数方便我们调用Ajax, 其中最核心也是最复杂的是jQuery.ajax(),所有的其他Ajax函数都是它的一个简化调用.当我们想要完全控制Ajax时可以 ...
- Thinkphp3.2使用scws中文分词 提取关键词
SCWS 是 Simple Chinese Word Segmentation 的首字母缩写(即:简易中文分词系统).1.下载scws官方提供的类(这里使用的是pscws第四版的)http://www ...
- YACC基本用法
YACC文件格式 yacc文件分为三部分: ... definitions ...(%{}%) %%... rules ...%% ... subroutines ... 定义部分 第一部分包括标 ...