实例介绍
【实例简介】
从中获取的许多知识,本文中的游戏也是从里面学到的,不过本人又自己加了一些功能。
这是一个类似于飞机大战的游戏,不过目前代码量比较小,所以看起来非常简陋游戏界面如下
更新日志,本人将原来的原来的代码有进一步的优化了一下,之前是只有一个非常小的战机现在更新后可以产生一个非常大的战机(看起来也更有气势了~~)和敌人的战机,不过死亡的判定条件和边境的判断条件还没有做好,等下次再继续加油。
【实例截图】
【核心代码】
#include<stdio.h>
#include<string.h>#include<conio.h>
#include<windows.h>
#include<stdlib.h>
#define MAX 100
long long int speed = 0;//控制敌机的速度
int position_x, position_y;//飞机的所在位置
int high, width;//地图的大小
int bullet_x, bullet_y;//子弹的位置
int enemy_x, enemy_y;//敌人的位置
int map[MAX][MAX];
/*0表示空白,1表示战机*的区域,2表示敌人战机的位置。
3表示上下围墙,4表示左右围墙,5表示子弹的位置*/
int score;
void starup()//初始化所有的信息
{
high = 20;
width = 30;
position_x = high / 2;
position_y = width / 2;
bullet_x = 0;
bullet_y = position_y;
enemy_x = 2;
enemy_y = position_y - 1;
score = 0;
}
void startMap()
{
int i, j;
for (i = 1; i <= high - 1; i )
{
map[i][1] = 4;
for (j = 2; j <= width - 1; j )
map[i][j] = 0;
map[i][width] = 4;
}
//下方围墙的初始化
i = high;
for (j = 1; j <= width; j )
map[i][j] = 3;
map[bullet_x][bullet_y] = 5;
/*这里是战机大小的初始化开始*/
map[position_x - 1][position_y] = 1;
i = position_x;
for (j = position_y - 2; j <= position_y 2; j )
map[i][j] = 1;
map[position_x 1][position_y - 1] = 1;
map[position_x 1][position_y 1] = 1;
/*** 初始化结束 **/
/* 敌人战机的初始化 */
map[enemy_x][enemy_y] = 2;
map[enemy_x - 1][enemy_y - 1] = 2;
map[enemy_x - 1][enemy_y 1] = 2;
/* 敌人战机初始化结束*/
}
void HideCursor()//隐藏光标
{
CONSOLE_CURSOR_INFO cursor_info = { 1, 0 };
SetConsoleCursorInfo(GetStdHandle(STD_OUTPUT_HANDLE), &cursor_info);
}
void gotoxy(int x, int y)//清理一部分屏幕
{
HANDLE handle = GetStdHandle(STD_OUTPUT_HANDLE);
COORD pos;
pos.X = x;
pos.Y = y;
SetConsoleCursorPosition(handle, pos);
}
void updateWithoutInput()//于输入无关的跟新
{
if (bullet_x > 0)
bullet_x--;
if ((bullet_x == enemy_x) && (bullet_y == enemy_y))//当敌人的飞机被击中时
{
score ;
enemy_x = 0;
enemy_y = rand() % width;
bullet_x = 0;
}
if (enemy_x > high)//当飞机超出区域
{
enemy_x = 0;
enemy_y = rand() % width;
}
if (speed == 1)
for (int i = 1; i <= 10000; i )//用来控制敌机的速度
{
for (int j = 1; j <= 1000; j )
{
speed = 1;
}
}
speed = 0;
if (speed == 0)
{
enemy_x ;
speed = 1;
}
}
void updateWithInput()//与输入有关的更新
{
char input;
if (kbhit())//在VC6.0 下,为_kbhit()
{
input = getch();//在VC6.0 下为_getch();
if (input == 'a')
position_y--;
if (input == 's')
position_x ;
if (input == 'd')
position_y ;
if (input == 'w')
position_x--;
if (input == ' ')
{
bullet_x = position_x - 1;
bullet_y = position_y;
}
}
}
void show()//展示的内容
{
gotoxy(0, 0);
int i, j;
for (i = 1; i <= high; i )
{
for (j = 1; j <= width; j )
{
if (map[i][j] == 0)
printf(" ");
if (map[i][j] == 1)
printf("*");
if (map[i][j] == 2)
printf("#");
if (map[i][j] == 3)
printf("~");
if (map[i][j] == 4)
printf("|");
if (map[i][j] == 5)
printf("|");
}
printf("\n");
}
printf("\n你的得分:%d\n\n", score);
printf("操作说明: ASDW分别操作 左下右上四个的移动\n");
printf("**空格是发出子弹**\n");
}
int main()
{
starup();
while (1)
{
HideCursor();
startMap();
show();
updateWithoutInput();
updateWithInput();
}
return 0;
}
小贴士
感谢您为本站写下的评论,您的评论对其它用户来说具有重要的参考价值,所以请认真填写。
- 类似“顶”、“沙发”之类没有营养的文字,对勤劳贡献的楼主来说是令人沮丧的反馈信息。
- 相信您也不想看到一排文字/表情墙,所以请不要反馈意义不大的重复字符,也请尽量不要纯表情的回复。
- 提问之前请再仔细看一遍楼主的说明,或许是您遗漏了。
- 请勿到处挖坑绊人、招贴广告。既占空间让人厌烦,又没人会搭理,于人于己都无利。
关于好例子网
本站旨在为广大IT学习爱好者提供一个非营利性互相学习交流分享平台。本站所有资源都可以被免费获取学习研究。本站资源来自网友分享,对搜索内容的合法性不具有预见性、识别性、控制性,仅供学习研究,请务必在下载后24小时内给予删除,不得用于其他任何用途,否则后果自负。基于互联网的特殊性,平台无法对用户传输的作品、信息、内容的权属或合法性、安全性、合规性、真实性、科学性、完整权、有效性等进行实质审查;无论平台是否已进行审查,用户均应自行承担因其传输的作品、信息、内容而可能或已经产生的侵权或权属纠纷等法律责任。本站所有资源不代表本站的观点或立场,基于网友分享,根据中国法律《信息网络传播权保护条例》第二十二与二十三条之规定,若资源存在侵权或相关问题请联系本站客服人员,点此联系我们。关于更多版权及免责申明参见 版权及免责申明
网友评论
我要评论