目录
1 暗香涌动
2 开心的眼眸
3 游戏展现
4 代码实现(C语言)
这几天下大雪了,很喜欢雪,在我眼中的雪另有一般暗香涌动:
雪,像一床棉被铺盖着大地;
大地,像新娘披着洁白的婚纱;
梅,在雪里倔强的绽放,像是
新郎手中的玫瑰,
暗香涌动,简谱而高贵........
心情很好,然后我很开心的选了几套很喜欢的衣服:
送给女朋友的小小游戏
//===========头文件一览===================//
//在正式介绍gamebody函数之前,我们先看看定义在头文件的全局变量以及他们的作用
#define _CRT_SECURE_NO_WARNINGS
#include
#include
#include
#include
#include
#include //需要用到的函数头文件
#define height 25 //宏定义游戏边界的高度
#define width 50 //宏定义游戏边界的宽度
#define enemy_max 5 //宏定义敌人的最多数量
enum Option //枚举增加代码可读性
{
EXIT,
PLAY,
GUIDE,
};
enum Condition //表示游戏幕布上的情况
{
backspace, //空
enemy, //敌人
bullet, //子弹
};
int canvas[height][width]; //游戏幕布存储对应位置上的Condition信息
int score; //记录游戏分数
int x, y; //飞机头部的xy坐标
int Std_Speed; //敌机标准下落速度,与之后的加速下落有关
int Std_Time; //敌机生成的标准速度,与之后的加速生成有关
int HP; //玩家生命值
int enemy_num; //此时的敌机数量
int times;
//==============清屏函数=========================//
void gotoxy(int x, int y)
{
HANDLE handle = GetStdHandle(STD_OUTPUT_HANDLE);
COORD pos;
pos.X = x;
pos.Y = y;
SetConsoleCursorPosition(handle, pos);
}
//============光标隐藏函数======================//
void HideCursor()
{
CONSOLE_CURSOR_INFO cursor_info = { 1, 0 };
SetConsoleCursorInfo(GetStdHandle(STD_OUTPUT_HANDLE), &cursor_info);
}
void Initgame()
{
for (int i = 0; i < height; i++)
{
for (int j = 0; j < width; j++) //将幕布上先初始化为空格
canvas[i][j] = backspace;
}
HP = 3;
score = 0;
x = width / 2; //初始化飞机位置
y = height / 2;
enemy_num = 0;
Std_Speed = 60;
Std_Time = 60;
}
//========================屏幕展示===================//
void show()
{
gotoxy(0, 0);
for (int i = 0; i < height; i++)
{
for (int j = 0; j < width; j++)
{
if (i == y && j == x) //打印飞机
printf("^");
else if (i == y + 1 && j == x - 2)
{
printf("-----");
j += 4;
}
else if (i == y + 2 && j == x - 1)
{
printf("^ ^");
j += 2;
}
else if (canvas[i][j] == bullet) // 打印子弹
printf("|");
else if (canvas[i][j] == enemy)
printf("*");
else
printf(" ");
}
printf("|\n"); //打印游戏边框
}
for (int j = 0; j < width; j++) //打印游戏边框
printf("-");
printf("\n[得分:>%d\n", score); //打印游戏分数和血量
printf("[生命值:>%d\n", HP);
}
//=========与用户输入有关的更新===================//
int updateWithinput()
{
if (_kbhit())
{
int input = _getch();
switch (input)
{
case 'w': if (y > 0) //防止飞机飞出游戏边界
y--;
break;
case 's': if (y < height - 3)
y++;
break;
case 'a': if (x > 2)
x--;
break;
case 'd': if (x < width - 3)
x++;
break;
case 27: system("pause"); break; //ESC的ascll码值为27
case ' ': if (y > 0)
canvas[y - 1][x] = bullet;
break;
case 'q': return 1; //退出游戏
}
}
return 0;
}
//===============对敌机位置更新的函数======================
int enemy_update()
{
static int enemy_speed = 0;
static int enemy_time = 0;
int flag = 0;
if (enemy_speed < Std_Speed) //依靠循环来减速
enemy_speed++;
if (enemy_time < Std_Time)
enemy_time++;
if (enemy_num < enemy_max && enemy_time >= Std_Time)
{
int i, j;
do
{
i = rand() % (height / 5);
j = rand() % (width - 4) + 2; //j的范围:[2, width - 3]
} while (canvas[i][j] != backspace);
canvas[i][j] = enemy;
enemy_num++;
enemy_time = 0;
}
if (enemy_speed >= Std_Speed)
{
flag = 1;
enemy_speed = 0;
}
for (int i = height - 1; i >= 0; i--)
{
for (int j = width - 1; j >= 0; j--)
{
if (canvas[i][j] == enemy) //遇到敌机的情况
{
if (i == height - 1) //敌机飞到边界
{
score--;
HP--;
if (HP == 0)
return 1;
enemy_num--;
canvas[i][j] = backspace;
}
else if (i < height - 1 && canvas[i + 1][j] == bullet)//检测是否被子弹击中
{
score++;
printf("\a");
enemy_num--;
if (score % 5 == 0 && Std_Speed >= 12) //分数到达一定程度后下落加快,生成加快
{
Std_Speed -= 3; //下落加快
Std_Time -= 3; //生成速度加快
}
canvas[i][j] = backspace;
}
else if (flag) //flag为1更新敌机位置
{
canvas[i + 1][j] = enemy;
canvas[i][j] = backspace;
}
}
}
}
return 0;
}
//======================对子弹位置更新的函数========================
void bullet_update()
{
for (int i = 0; i < height; i++) //控制子弹的移动
{
for (int j = 0; j < width; j++)
{
if (canvas[i][j] == bullet)
{
if (i > 0 && canvas[i - 1][j] == enemy)
{
score++;
printf("\a");
enemy_num--;
if (score % 5 == 0 && Std_Speed >= 6) //分数到达一定程度后下落加快,生成加快
{
Std_Speed -= 3; //下落加快
Std_Time -= 3; //生成速度加快
}
canvas[i - 1][j] = bullet;
}
else if (i > 0)
canvas[i - 1][j] = bullet;
canvas[i][j] = backspace;
}
}
}
}
//===============组合而成的gamebody函数==============
void gamebody()
{
system("cls");
Initgame();
HideCursor();
srand((unsigned int)time(NULL));
while (1)
{
show();
bullet_update();
if (updateWithinput() || enemy_update())
{
show();
printf("[本次游戏结束:>");
system("pause");
break;
}
}
}
//====包含PLAY(游戏)功能、GUIDE(操作说明)、EXIT(退出游戏)三种功能。====//
void menu()
{
printf("*****************\n");
printf("** 飞机游戏 **\n");
printf("**-------------**\n");
printf("** 1.PLAY **\n");
printf("** 2.GUIDE **\n");
printf("** 3.EXIT **\n");
printf("*****************\n");
}
//==================游戏操作指南======================//
void guide()
{
printf("******************\n");
printf("** 游戏操作指南 **\n");
printf("**--------------**\n");
printf("** e->上移 **\n");
printf("** x->下移 **\n");
printf("** s->左移 **\n");
printf("** f->右移 **\n");
printf("** w->返回 **\n");
printf("** ESC->暂停 **\n");
printf("** 空格->射击 **\n");
printf("******************\n\n\n");
}
//==========基本的游戏初始选择框架:==========================//
int main()
{
int input = 0;
do
{
menu();
printf("[请选择:>");
scanf("%d", &input);
switch (input)
{
case PLAY: gamebody(); break;
case GUIDE: guide(); break;
case EXIT: printf("成功退出游戏!\n"); break;
default: printf("输入错误,请重新选择\n");
}
} while (input);
return 0;
}