码迷,mamicode.com
首页 > 移动开发 > 详细

游戏中与用户移动与道具移动相结合

时间:2019-11-17 10:43:52      阅读:127      评论:0      收藏:0      [点我收藏+]

标签:tin   break   printf   子弹   return   windows   kbhit   小白   实现   

//下边是一个用户与电脑对战的<飞机大战>游戏

#include <stdio.h>
#include <stdlib.h>
#include <windows.h>
#include <conio.h>

//这里为了大部分小白方便查看,游戏中的数据都使用全局变量,可以自行对比代码尝试用指针去实现
int Fx,Fy;//飞机位置
int High,Width,Top,Bottom;//地图边框
int pand=0,Xx,Xy;//我方子弹位置
int Qx,Qy;//敌方飞机的位置
int Qpand=0,Mx,My;//敌方子弹位置

void gotoxy();//窗口句柄
void Num();//初始化数据
void Map();//打印地图
char DateWithInput();//与用户输入有关的数据更新
char DateWithoutInput();//与用户输入无关的更新
void XPand();//判断用户是否发射子弹
void QFox();//敌方飞机
void QPand();//判断敌方子弹是否发射
void Pause();//按ESC实现暂停
int main ()
{
char cChar;
Num();
while(1)
{
Map();
cChar=DateWithInput();
DateWithoutInput(cChar);
}
system("pause");
return 0;
}
void gotoxy(int x,int y)
{
COORD pre = {x,y};
HANDLE hOut = GetStdHandle(STD_OUTPUT_HANDLE);
SetConsoleCursorPosition(hOut,pre);
}
void Num()
{
High=20; Top=0;
Width=40; Bottom=0;
Fx=10; Fy=10;
Xx=-1; Xy=-1;
Qx=3; Qy=2;
Mx=-1; My=-1;
}
void Map()
{
int i,j;
gotoxy(0,0);
for(i=0;i<High;i++)
{
for(j=0;j<Width;j++)
{
if((i==Top||i==High-1)||(j==Bottom||j==Width-1))
printf("*");
else if(i==Fx&&j==Fy)
printf("A");
else if(i==Xx&&j==Xy)
printf("m");
else if(i==Qx&&j==Qy)
printf("@");
else if(i==Mx&&j==My)
printf("$");
else
printf(" ");
}
printf("\n");
}
}
char DateWithInput()
{
char cChar;
if(kbhit())
{
cChar=getch();
switch(cChar)
{
case ‘w‘:
if(Fx==High-1||Fx==Top+1)
break;
Fx--;
break;
case ‘a‘:
if(Fy==Width-1||Fy==Bottom+1)
break;
Fy--;
break;
case ‘s‘:
if(Fx==High-1||Fx==Top+1)
break;
Fx++;
break;
case ‘d‘:
if(Fy==Width-1||Fy==Bottom+1)
break;
Fy++;
break;
default:
return cChar;
break;
}
}
return cChar;
}
char DateWithoutInput(char cChar)
{
XPand(cChar);
Pause(cChar);
QFox();
}
void XPand(char cChar)
{
if(pand==0)
{
if(cChar==‘j‘)
{
Xx=Fx-1;
Xy=Fy;
pand=1;
}
}
else
{
if(Xx==0)
{
pand=0;
Xx=-1;
Xy=-1;
}
if(Xx==Qx&&Xy==Qy)
{
system("cls");
printf("敌方失败!");
Sleep(2000);
exit(0);
}
Xx--;
}
}
void QFox()
{
if(Qpand==0)
{
Sleep(50);
if(Qy<Fy)
Qy++;
else if(Qy>Fy)
Qy--;
else
{
Qpand=1;
Mx=Qx+1;
My=Qy;
}
}
else
{
if(Qy>Fy)
Qy++;
else if(Qy<Fy)
Qy--;
else
{
if(Width-Qy>Qy)
Qy--;
else
Qy++;
}
if(Mx==High)
{
Mx=-1;
My=-1;
Qpand=0;
}
if(Mx==Fx&&My==Fy)
{
system("cls");
printf("失败!");
Sleep(2000);
exit(0);
}
Mx++;

}
}
void Pause(char cChar)
{
if(cChar==27)
{
system("cls");
system("pause");
}
}

游戏中与用户移动与道具移动相结合

标签:tin   break   printf   子弹   return   windows   kbhit   小白   实现   

原文地址:https://www.cnblogs.com/yylgoodjob/p/11875377.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!