• 大小: 4KB
    文件类型: .c
    金币: 2
    下载: 1 次
    发布日期: 2021-06-07
  • 语言: C/C++
  • 标签: 坦克大战  

资源简介

学习了Linux的终端控制之后编写的一个小游戏,使用WASD这几个键来控制坦克在终端下移动,按j键开炮,目前一次只能有一个炮弹飞出,按e键退出。非Linux用户请勿下载,该程序只能运行在Linux终端下(也许Unix也可以)。

资源截图

代码片段和文件信息

#include 
#include 
#include 
#include 
#include 
#include 
#include 

#define HEIGHT 30//地图高度
#define WIDE 100//地图宽度

enum direction {UP LEFT RIGHT DOWN};//坦克的朝向

struct spot {
int i j;//子弹坐标
int fly;//子弹是否在飞行
enum direction dir;//飞行方向
};

void tank(int i int j enum direction dir);//绘制坦克
void era(int i int j enum direction dir);//擦除原图像
void fire(struct spot *bullet int i int j enum direction dir);//开炮
int moveable(int i int j int height int wide);//测试是否可以移动
int fireable(struct spot *bullet);//测试是否能继续开炮
void fly(struct spot *bullet);//绘制子弹

char *cursor *clean;

int main(void)
{
char choice = ‘a‘;
int row col;
enum direction dir = LEFT;
struct termios initial_term new_term;
struct spot bullet = {0 0 0 LEFT};
int hit = 0  con = 1;

//配置输入模式
tcgetattr(fileno(stdin) &initial_term);
new_term = initial_term;
new_term.c_lflag &= ~ICANON;//非标准输入模式
new_term.c_lflag &= ~ECHO;//取消回显
new_term.c_cc[VMIN] = 0;//没有读入字符也可以返回
new_term.c_cc[VTIME] = 1;//等待时间0.1秒
tcsetattr(fileno(stdin) TCSANOW &new_term);

//匹配终端信息,获取功能字符串
setupterm(NULL fileno(stdout) (int *)0);
cursor = tigetstr(“cup“);
clean = tigetstr(“clear“);

col = row = 2;


putp(tparm(cursor 0 0));
putp(clean);
tank(row col dir);

while(con) {
if(scanf(“%c“ &choice) == 1) {//此处由于输入模式的设置,不会堵塞
switch(choice) {
case ‘w‘: if(moveable(row-1 col HEIGHT WIDE)) {
row--;
dir = UP;

else putchar(‘\a‘);;
break;

case ‘s‘: if(moveable(row+1 col HEIGHT WIDE)) {
row++;
dir = DOWN;
}
else putchar(‘\a‘);
break;

case ‘a‘: if(moveable(row col-1 HEIGHT WIDE)) {
col--;
dir = LEFT;
}
else putchar(‘\a‘);
break;

case ‘d‘: if(moveable(row col+1 HEIGHT WIDE)) {
col++;
dir = RIGHT;

else putchar(‘\a‘);
break;
case ‘j‘: if(fireable(&bullet)) fire(&bullet row col dir);
break;
case ‘e‘: con = 0;
break;
}
era(row col dir);
tank(row col dir);
}
fly(&bullet);
}

printf(“Bye Bye!\n“);
sleep(2);
putp(tparm(cursor 

评论

共有 条评论