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 ...
随机推荐
- 实现winfrom进度条及进度信息提示,winfrom程序假死处理
1.方法一:使用线程 功能描述:在用c#做WinFrom开发的过程中.我们经常需要用到进度条(ProgressBar)用于显示进度信息.这时候我们可能就需要用到多线程,如果不采用多线程控制进度条,窗口 ...
- C#获取URL参数值(NameValueCollection)
在写程序的时候,我们经常需要对页面进行传参数,比如page?id=1234,那么在page这个页面中就直接可以使用string id = Request.QueryString["id&qu ...
- Android EditText 取消复制粘贴功能,取消横向全屏编辑功能(一)
在做一些安全性的软件时候常常要考虑取消 EditText 上的复制粘贴功能以确保安全性.下面就记录了这个方法: 首先在API-11以下的版本很简单,只需要在Xml布局文件或者用代码把长按属性设置成fa ...
- 枚举基类Enum详解
本文主要是对枚举类型的基类Enum类做一个介绍: 首先,Enum类位于java.lang包下,根据类的介绍可以发现,Enum类是Java中所有枚举类的父类,将枚举作为一个set或者Map的keys来使 ...
- 10Cookie
<!DOCTYPE html> <html xmlns="http://www.w3.org/1999/xhtml"> <head> <m ...
- js 完美兼容浏览器的复制功能
1,js结合swf的复制功能,完美兼容火狐,谷歌,360,ie8,使用示例:(ps:引入copy.swf比较重要,文件传送门 解压密码:http://www.bieanju.com/,为了防止360删 ...
- Flink Program Guide (7) -- 容错 Fault Tolerance(DataStream API编程指导 -- For Java)
false false false false EN-US ZH-CN X-NONE /* Style Definitions */ table.MsoNormalTable {mso-style-n ...
- Composer加速
在composer.json中添加{ "repositories": [ {"type": "composer", "url&qu ...
- Diet
Dialogue 1 Healthy diet 关于健康饮食 F:Bob, look at this sentence. 'Healthy eating is not about strict n ...
- MVC 创建带图片的<A></A>标签
<a href="@Url.Action("Detail", "Product", new { messageId = item.message ...