level 6
浮华的终成空ლ
楼主
#include<stdio.h>
#include <stdlib.h>
#include <conio.h>
#include <unistd.h>
#define H 20
#define W 20
typedef struct{
int x;
int y;
}person_t;
//定义表示方向的枚举变量
typedef enum {DIR_NULL, UP, RIGHT, DOWN, LEFT}dir_t;
typedef enum {START, PLAYING, OVER}game_state_t;
//记录那个方向键被按下了。
dir_t kdir;
//记录游戏状态
game_state_t gs;
//定义二维数组一个变量表示地图
char map[H][W];
person_t p; // 一个人
//移动人
//设置人的位置的
void set_person(person_t* p, int x, int y)
{
p->x = x;
p->y = y;
}
void input()
{
//默认任何键都没有按下,防止多次执行
kdir = DIR_NULL;
if(!_kbhit()) return;
switch(getch())
{
case '2':
kdir = UP;
break;
case '6':
kdir = RIGHT;
break;
case '8':
kdir = DOWN;
break;
case '4':
kdir = LEFT;
break;
case '0':
gs = OVER;
break;
default:
break;
}
}
void move_person(person_t* p, dir_t dir)
{
int x=0,y=0; //保存 在x y方向上的移动距离
switch(dir)
{
case UP:
y--;
break;
case DOWN:
y++;
break;
case LEFT:
x--;
break;
case RIGHT:
x++;
break;
default:
break;
}
}
void update()
{ int x, y;
//我们用9 表示四周的围墙,0表示空地
for(y=0; y<H; y++)
{
for(x=0; x<W; x++)
{
//如果是数组的边缘,就设置为OBJ_WALL,也就是墙。
if(x==0 || x==W-1 || y==0 || y==H-1)
map[y][x]=9;
else
map[y][x]=0;
}
}
//根据用户按键来更新人的位置
move_person(&p, kdir);
//设置人
map[p.y][p.x] = 2;
}
void display()
{
int x, y;
system("cls");
//然后我们输出这个数组看看
for(y=0; y<H; y++)
{
for(x=0; x<W; x++)
{ if (9== map[y][x])
printf("🔴");
else if (2== map[y][x])
printf("♀");
else
printf(" ");
}
printf("\n");
}
}
//主函数
int main()
{
set_person(&p,10, 4);
// mep();
while(gs!=OVER)
{
input();
update();
display();
//buf_display();
sleep (3);
}
return 0;
}
2017年06月22日 04点06分
1
#include <stdlib.h>
#include <conio.h>
#include <unistd.h>
#define H 20
#define W 20
typedef struct{
int x;
int y;
}person_t;
//定义表示方向的枚举变量
typedef enum {DIR_NULL, UP, RIGHT, DOWN, LEFT}dir_t;
typedef enum {START, PLAYING, OVER}game_state_t;
//记录那个方向键被按下了。
dir_t kdir;
//记录游戏状态
game_state_t gs;
//定义二维数组一个变量表示地图
char map[H][W];
person_t p; // 一个人
//移动人
//设置人的位置的
void set_person(person_t* p, int x, int y)
{
p->x = x;
p->y = y;
}
void input()
{
//默认任何键都没有按下,防止多次执行
kdir = DIR_NULL;
if(!_kbhit()) return;
switch(getch())
{
case '2':
kdir = UP;
break;
case '6':
kdir = RIGHT;
break;
case '8':
kdir = DOWN;
break;
case '4':
kdir = LEFT;
break;
case '0':
gs = OVER;
break;
default:
break;
}
}
void move_person(person_t* p, dir_t dir)
{
int x=0,y=0; //保存 在x y方向上的移动距离
switch(dir)
{
case UP:
y--;
break;
case DOWN:
y++;
break;
case LEFT:
x--;
break;
case RIGHT:
x++;
break;
default:
break;
}
}
void update()
{ int x, y;
//我们用9 表示四周的围墙,0表示空地
for(y=0; y<H; y++)
{
for(x=0; x<W; x++)
{
//如果是数组的边缘,就设置为OBJ_WALL,也就是墙。
if(x==0 || x==W-1 || y==0 || y==H-1)
map[y][x]=9;
else
map[y][x]=0;
}
}
//根据用户按键来更新人的位置
move_person(&p, kdir);
//设置人
map[p.y][p.x] = 2;
}
void display()
{
int x, y;
system("cls");
//然后我们输出这个数组看看
for(y=0; y<H; y++)
{
for(x=0; x<W; x++)
{ if (9== map[y][x])
printf("🔴");
else if (2== map[y][x])
printf("♀");
else
printf(" ");
}
printf("\n");
}
}
//主函数
int main()
{
set_person(&p,10, 4);
// mep();
while(gs!=OVER)
{
input();
update();
display();
//buf_display();
sleep (3);
}
return 0;
}





