开飞机打飞机
极度简陋版,做着玩
/20.3.27/
基本描述
- 玩家控制一架飞机,用
*
表示; - 敌机只有一架,随机位置飞来,用
@
表示; - 子弹能发一颗 ,用
|
表示;//暂且叫做子弹吧,要不然叫导弹?感觉叫啥都行 - 子弹击中敌机后,子弹和敌机消失,得一分;
- 被敌机撞到后,游戏结束
- 上下左右由
W
、S
、A
、D
控制,空格
发射子弹;
存在缺陷
- 只有一架飞机,飞完就没了
- 只有一颗子弹,打完了再打,之前的就没了
- 有几率打不中,飞机和子弹恰好遇到,下一个循环恰好错过时,miss
C语言源代码
#include <stdio.h>
#include <stdlib.h>
#include <conio.h>
#include <windows.h>
int high, wid; //游戏场景的高和宽
int plane_h, plane_w; //飞机位置
int bullet_h, bullet_w; //子弹位置
int enemy_h, enemy_w; //敌机位置
int interval; //同个计次来模拟时间间隔
int itv_enemy; //敌机移动的时间间隔
int score; //分数
void Startup(); //游戏数值初始化
void Show(); //游戏界面输出
void UpdateInput(); //与输入无关的游戏状态更新
void UpdateNormal(); //因输入导致的游戏状态更新
int main()
{
Startup(); //初始化
while(1){ //游戏循环
Show();
UpdateInput();
UpdateNormal();
}
return 0;
}
void Startup(){
score=0;
high=25; //初始化场景高度
wid=60; //初始化场景宽度
plane_h=15; //初始化飞机竖直坐标
plane_w=10; //初始化飞机水平坐标
bullet_h=-1; //初始化子弹竖直坐标
bullet_w=10; //初始化子弹水平坐标
enemy_h=-1; //初始化敌机竖直坐标
srand(time(NULL));
enemy_w=rand()%wid; //初始化敌机水平坐标
interval=0; //初始化时间间隔计数
itv_enemy=5; //初始化敌机移动时间间隔
}
void Show(){
HideCursor(); //隐藏光标
gotoxy(1,1); //回调光标、刷新画面
for(int i=0;i<high;i++){
for(int j=0;j<wid;j++){
if( i==plane_h && j==plane_w ){ //当前位置为飞机位置
printf("*");
}
else if( i==bullet_h && j==bullet_w ){ //当前位置为子弹位置
printf("|");
}
else if( i==enemy_h && j==enemy_w ){ //当前位置为敌机位置
printf("@");
}
else if( i<high && j<wid ){ //当前位置无物,且在边界内
printf(" ");
}
}
printf("|\n"); //输出右边界
}
for(int i=0;i<wid;i++){ //输出下边界
printf("-");
}
printf("*\n\n得分:%d",score);
}
void UpdateInput(){
char key; //检测按下的键
if(kbhit()){ //当键按下
key=getch(); //获取键值
if(key=='w'||key=='W'){ //当按下w键,上移
if(plane_h>0)plane_h--;
}
if(key=='s'||key=='S'){ //当按下s键,下移
if(plane_h<high-1)plane_h++;
}
if(key=='a'||key=='A'){ //当按下a键,左移
if(plane_w>0)plane_w--;
}
if(key=='d'||key=='D'){ //当按下d键,右移
if(plane_w<wid-1)plane_w++;
}
if(key==' '){ //当按下空格键,发射子弹
bullet_h=plane_h-1;
bullet_w=plane_w;
}
}
}
void UpdateNormal(){
if(bullet_h>-1&&bullet_h<high){ //子弹未到边界时,向上移动
bullet_h--;
}
if(enemy_h<high && interval%itv_enemy==0){ //敌机未到下边界时,向下移动,
/////////////////////////////////////////////每次移动的时间间隔为itv_enemy
enemy_h++;
}
if(bullet_h==enemy_h && enemy_w==bullet_w){ //子弹打到敌机,两两消失
enemy_h=high;
bullet_h=-1;
printf("\a"); //击中响铃
score++;
}
if(plane_h==enemy_h && plane_w==enemy_w){ //敌机撞到玩家飞机,游戏结束
printf("\t游戏结束!");
exit(0);
}
if(interval<=100){ //时间间隔计次
interval++;
}
else{
interval=0;
}
}
void gotoxy(int x,int y){ //回调光标
COORD pos;
pos.X=x-1;
pos.Y=y-1;
SetConsoleCursorPosition(GetStdHandle(STD_OUTPUT_HANDLE),pos);
}
void HideCursor(){ //隐藏光标函数
CONSOLE_CURSOR_INFO cursor;
cursor.bVisible = FALSE;
cursor.dwSize = sizeof(cursor);
HANDLE handle = GetStdHandle(STD_OUTPUT_HANDLE);
SetConsoleCursorInfo(handle, &cursor);
}
参考
- 河海大学童晶老师的课程(做游戏,学编程)