-
大小: 4KB文件類型: .c金幣: 1下載: 1 次發(fā)布日期: 2021-06-07
- 語(yǔ)言: C/C++
- 標(biāo)簽: 坦克大戰(zhàn)??
資源簡(jiǎn)介
學(xué)習(xí)了Linux的終端控制之后編寫(xiě)的一個(gè)小游戲,使用WASD這幾個(gè)鍵來(lái)控制坦克在終端下移動(dòng),按j鍵開(kāi)炮,目前一次只能有一個(gè)炮彈飛出,按e鍵退出。非Linux用戶請(qǐng)勿下載,該程序只能運(yùn)行在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;//子彈坐標(biāo)
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);//開(kāi)炮
int?moveable(int?i?int?j?int?height?int?wide);//測(cè)試是否可以移動(dòng)
int?fireable(struct?spot?*bullet);//測(cè)試是否能繼續(xù)開(kāi)炮
void?fly(struct?spot?*bullet);//繪制子彈
char?*cursor?*clean;
int?main(void)
{
char?choice?=?‘a(chǎn)‘;
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;//非標(biāo)準(zhǔn)輸入模式
new_term.c_lflag?&=?~ECHO;//取消回顯
new_term.c_cc[VMIN]?=?0;//沒(méi)有讀入字符也可以返回
new_term.c_cc[VTIME]?=?1;//等待時(shí)間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)?{//此處由于輸入模式的設(shè)置,不會(huì)堵塞
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(chǎn)‘: 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?
評(píng)論
共有 條評(píng)論