//合理的游戏框架
#include<stdio.h>
#include<stdio.h>
#include<stdlib.h>
#include<windows.h>
#include<conio.h>
#include <time.h>
#include <dos.h>
#define Speed 11 //难度设置
//全局变量
int position_x,position_y;
int out_x,out_y;
int nemey_x,nemey_y;
int high,width; //游戏画面尺寸
int num=0;
int iskill=0;
int isout=0; //是否发射
void print()
{
for(int j=0;j<width+30;j++)
{
if(j==position_y) printf("*");
else printf(" ");
}printf("\n");
for(int j=0;j<width+30;j++)
{
if(j==position_y-2)
{
printf("*****");
j+=4;
continue;
}
else printf(" ");
}printf("\n");
for(int j=0;j<width+30;j++)
{
if(j==position_y-1)
{
printf("* *");
j+=2;
continue;
}
else printf(" ");
}printf("\n");
}
void gotoxy(int x, int y) //光标移动到x,y位置
{
COORD pos = {x,y};
HANDLE hOut = GetStdHandle(STD_OUTPUT_HANDLE);// 获取标准输出设备句柄
SetConsoleCursorPosition(hOut, pos); //两个参数分别是指定哪个窗体,具体位置
}
void HideCursor() // 用于隐藏光标
{
CONSOLE_CURSOR_INFO cursor_info = {1, 0}; // 第二个值为0表示隐藏光标
SetConsoleCursorInfo(GetStdHandle(STD_OUTPUT_HANDLE), &cursor_info);//函数和结构体都在windows.h中定义。
}
void startup()
{
srand(time(NULL));
HideCursor();
nemey_y=rand()%24+2;
nemey_x=1;
high=20;
width=25;
position_x=high/2;
position_y=width/2;
out_x=0;
}
void show()
{
// system("cls");
gotoxy(0,0);
if(position_y<2) position_y=2;
printf("目前分数:%d (得分越高越难)\n",num);
for(int i=1;i<position_x;i++)
{
int j;
for(j=0;j<width;j++)
{
if(j==out_y&&
i==out_x)printf("|");
else if(j==nemey_y&&
i==nemey_x)printf("+");
else printf(" ");
}
printf("\n");
}
print();
for(int i=position_x+3;i<high+9;i++)
{
for(int x=0;x<width;x++) printf(" ");
printf("\n");
}
// printf("*");
}
int speed=0;
void updateWithoutInput()
{
int up=num/2;
if(up>10) up=10;
if(speed<Speed-up) speed++; //难度动态变化
if(out_x==nemey_x&&nemey_y== //三倍子弹速度
out_y) iskill=1;
out_x--;
if(out_x==nemey_x&&nemey_y==
out_y) iskill=1;
out_x--;
if(out_x==nemey_x&&nemey_y==
out_y) iskill=1;
out_x--;
if(out_x==nemey_x&&nemey_y==
out_y) iskill=1;
if(iskill==1) //击中后重新设置
{
nemey_y=rand()%22+2;
nemey_x=1;
iskill=0;
num++;
// printf("恭喜击中\n");
}
if(speed>=Speed-up)
{
nemey_x++;
speed=0;
}
// printf("%d\n",nemey_x);
if(nemey_x>20) //敌人边界设置
{
nemey_x=1;
num--;
}
// Sleep(100);
}
void updateWithInput()
{
char input;
if(kbhit())
{
input=getch();
if(input==' '&&out_x<=0) //子弹初始位置
{
out_y=position_y;
out_x=position_x;
}
if(input==27) system("pause");
if(input=='s') position_x++;
if(input=='w') position_x--;
if(input=='a') position_y--;
if(input=='d') position_y++;
}
}
int main()
{
startup(); //数据初始化
while(1) //游戏循环执行
{
show(); //游戏画面
updateWithoutInput(); //与输入无关更新
updateWithInput(); //与输入有关更新
}
return 0;
}