项目: 用封装的方法实现飞机大战游戏
目录
- 一、项目描述和最终的成果展示
- 二、用函数进行封装
- 三、新型的发射子弹功能
- 四、实现移动的敌机功能和更正屏幕闪烁,清除光标功能
- 五、订正一些BUG和完成一些美化
这是上一次的飞机大战游戏的项目。项目: 最简单的飞机大战游戏
上次没有用函数进行的封装。这次在上次的基础上进行封装和一些功能的优化。
一、项目描述和最终的成果展示
项目描述: 在上一次的基础上用函数进行了封装,对于一些功能也进行了一些优化。
最终效果图如下:
二、用函数进行封装
代码如下:
#include<stdio.h>
#include<stdlib.h>
#include<Windows.h>
#include<conio.h>//全局变量
int position_x,position_y;//飞机位置
int high,width;//游戏画面尺寸void startup()//数据的初始化
{high = 20;width = 30;position_x = high/2;//飞机的上下位置position_y = width/2;//飞机的左右·位置
}void show()//显示画面
{system("cls");int i,j;for(i=0;i<high;i++){for(j=0;j<width;j++){if( (i == position_x) && (j== position_y))//输出飞机printf("☆");elseprintf(" ");}printf("\n");}
}void updateWithoutInput()//与用户输入无关的更新
{}void updateWithInput()//与用户输入有关的更新
{char input;if(kbhit())//判断有无输入{input=getch();if( input == 'a' || input == 'A')position_y--;//左移if( input == 'd' || input == 'D')position_y++;//右移if( input == 'w' || input == 'W')position_x--;//上移if( input == 's' || input == 'S')position_x++;//下移}
}int main(void)
{startup(); //数据的初始化while(1){show();//显示画面updateWithoutInput();//与用户输入无关的更新updateWithInput();//与用户输入有关的更新}return 0;
}
三、新型的发射子弹功能
代码如下:
#include<stdio.h>
#include<stdlib.h>
#include<Windows.h>
#include<conio.h>//全局变量
int position_x,position_y;//飞机位置
int high,width;//游戏画面尺寸
int bullet_x,bullet_y;//子弹位置//定义隐藏光标函数
void HideCursor()
{CONSOLE_CURSOR_INFO cursor; cursor.bVisible = FALSE; cursor.dwSize = sizeof(cursor); HANDLE handle = GetStdHandle(STD_OUTPUT_HANDLE); SetConsoleCursorInfo(handle, &cursor);
}void startup()//数据的初始化
{high = 120;width = 100;position_x = high/2;//飞机的上下位置position_y = width/2;//飞机的左右·位置bullet_x = 0;bullet_y = position_y;
}void show()//显示画面
{system("cls");int i,j;for(i=0;i<high;i++){for(j=0;j<width;j++){if( (i == position_x) && (j== position_y))//输出飞机printf("☆");else if( (i == bullet_x)&&(j == bullet_y))printf("|");//输出子弹elseprintf(" ");}printf("\n");}
}void updateWithoutInput()//与用户输入无关的更新
{if(bullet_x>-1)bullet_x--;
}void updateWithInput()//与用户输入有关的更新
{char input;if(kbhit()){input=getch();if( input == 'a' || input == 'A')position_y--;//左移if( input == 'd' || input == 'D')position_y++;//右移if( input == 'w' || input == 'W')position_x--;//上移if( input == 's' || input == 'S')position_x++;//下移if( input == ' '){bullet_x=position_x-1;bullet_y=position_y;}}
}int main(void)
{startup();//数据的初始化while(1){show();//显示画面HideCursor();//隐藏光标,防止光标乱闪。updateWithoutInput();//与用户输入无关的更新updateWithInput();//与用户输入有关的更新}return 0;
}
效果图如下:
发射子弹的功能和上次有了明显的改进,有了一个动态发射的一个效果。
四、实现移动的敌机功能和更正屏幕闪烁,清除光标功能
代码如下;
#include<stdio.h>
#include<stdlib.h>
#include<Windows.h>
#include<conio.h>//全局变量
int position_x,position_y;//飞机位置
int high,width;//游戏画面尺寸
int bullet_x,bullet_y;//子弹位置
int enemy_x,enemy_y;//敌机的位置
int score;//得分//定义隐藏光标函数
void HideCursor()
{CONSOLE_CURSOR_INFO cursor; cursor.bVisible = FALSE; cursor.dwSize = sizeof(cursor); HANDLE handle = GetStdHandle(STD_OUTPUT_HANDLE); SetConsoleCursorInfo(handle, &cursor);
}void gotoxy(int x,int y)//将光标移动到(x,y)位置
{HANDLE handle =GetStdHandle(STD_OUTPUT_HANDLE);COORD pos;pos.X = x;pos.Y = y;SetConsoleCursorPosition(handle,pos);
}
void startup()//数据的初始化
{system("color 09");high = 30;width =50;position_x = high/2;//飞机的上下位置position_y = width/2;//飞机的左右位置bullet_x = 0;bullet_y = position_y;enemy_x=0;enemy_y=position_y;score=0;
}void show()//显示画面
{//system("cls");gotoxy(0,0);int i,j;for(i=0;i<high;i++){for(j=0;j<width;j++){if( (i == position_x) && (j== position_y))//输出飞机printf("☆");else if( (i == bullet_x)&&(j == bullet_y))printf("|");//输出子弹else if( (i== enemy_x) && ( j==enemy_y))printf("*");//输出敌机elseprintf(" ");//输出空格}printf("\n");}printf("得分:%d\n",score);
}void updateWithoutInput()//与用户输入无关的更新
{static int speed=0;if(bullet_x>-1)bullet_x--;if( (bullet_x == enemy_x) && (bullet_y ==enemy_y) )//子弹击中飞机{score++;//分数无效enemy_x=-1;//产生新的敌机enemy_y=rand()%width;bullet_x=-2;//子弹无效}// 用来控制敌机向下移动的速度,每隔几次循环才移动一次敌机// 这样修改,虽然用户按键的交互速度还是很快,但是NPC的移动显示可以降速if(speed<10)speed++;if(speed == 10 ){enemy_x++;speed = 0;}
}void updateWithInput()//与用户输入有关的更新
{char input;if(kbhit()){input=getch();if( input == 'a' || input == 'A')position_y--;//左移if( input == 'd' || input == 'D')position_y++;//右移if( input == 'w' || input == 'W')position_x--;//上移if( input == 's' || input == 'S')position_x++;//下移if( input == ' '){bullet_x=position_x-1;bullet_y=position_y;}}
}int main(void)
{startup();//数据的初始化while(1){show();//显示画面HideCursor();//隐藏光标,防止光标乱闪。updateWithoutInput();//与用户输入无关的更新updateWithInput();//与用户输入有关的更新}return 0;
}
效果图如下:
五、订正一些BUG和完成一些美化
我们的项目基本是已经完成了。但是还有很多的漏洞。
比如: 飞机控制越界问题,以及敌机越界问题。
而且界面不够好看我们要再美化一下。
以及增加游戏暂停功能。
游戏结束功能。
代码如下:
#include<stdio.h>
#include<stdlib.h>
#include<Windows.h>
#include<conio.h>//全局变量
int position_x,position_y;//飞机位置
int high,width;//游戏画面尺寸
int bullet_x,bullet_y;//子弹位置
int enemy_x,enemy_y;//敌机的位置
int score;//得分//定义隐藏光标函数
void HideCursor()
{CONSOLE_CURSOR_INFO cursor; cursor.bVisible = FALSE; cursor.dwSize = sizeof(cursor); HANDLE handle = GetStdHandle(STD_OUTPUT_HANDLE); SetConsoleCursorInfo(handle, &cursor);
}void gotoxy(int x,int y)//将光标移动到(x,y)位置
{HANDLE handle =GetStdHandle(STD_OUTPUT_HANDLE);COORD pos;pos.X = x;pos.Y = y;SetConsoleCursorPosition(handle,pos);
}
void startup()//数据的初始化
{system("color 09");high = 30;width =50;position_x = high/2;//飞机的上下位置position_y = width/2;//飞机的左右位置bullet_x = 0;bullet_y = position_y;enemy_x=0;enemy_y=position_y;score=0;
}void show()//显示画面
{//system("cls");gotoxy(0,0);int i,j;for(i=0;i<high;i++){for(j=0;j<width;j++){if( (i == position_x) && (j== position_y))//输出飞机printf("☆");else if( (i == bullet_x)&&(j == bullet_y))printf("|");//输出子弹else if( (i== enemy_x) && ( j==enemy_y))printf("*");//输出敌机else if(j==width-1&&i==position_x)//飞机那一行,因为有飞机多占一格,所以要删除前面的一个空格printf("\b+");else if(j==width-1)printf("+");else if(i==high-1)printf("-");elseprintf(" ");//输出空格}printf("\n");}printf("得分:%d\n",score);printf("按1键游戏暂停\n");
}void updateWithoutInput()//与用户输入无关的更新
{static int speed=0;if(bullet_x>-1)bullet_x--;if( (bullet_x == enemy_x) && (bullet_y ==enemy_y) )//子弹击中飞机{score++;//分数无效enemy_x=-1;//产生新的敌机enemy_y=rand()%width+1;bullet_x=-2;//子弹无效}// 用来控制敌机向下移动的速度,每隔几次循环才移动一次敌机// 这样修改,虽然用户按键的交互速度还是很快,但是NPC的移动显示可以降速if(speed<6)speed++;if(speed == 6 ){enemy_x++;if(enemy_x==high-1)//如果飞机越界再次生成{enemy_x=-1;//产生新的敌机enemy_y=rand()%width+1;}if( enemy_x==position_x-1)//撞机了 游戏结束{system("cls");printf("飞机坠毁了,游戏结束\n");printf("分数为:%d\n",score);printf("请重启再开始新的一局\n");while(1){}}speed = 0;}
}void updateWithInput()//与用户输入有关的更新
{char input;if(kbhit()){input=getch();if( input == 'a' || input == 'A'){position_y--;//左移if(position_y==0)//判断是否越界{position_y++;}}if( input == 'd' || input == 'D'){position_y++;//右移if(position_y==width-2)//判断是否越界{position_y--;}}if( input == 'w' || input == 'W'){position_x--;//上移if(position_x==1)//判断是否越界{position_x++;}}if( input == 's' || input == 'S'){position_x++;//下移if(position_x==high-1)//判断是否越界{position_x--;}}if( input == ' ')//发射子弹{bullet_x=position_x-1;bullet_y=position_y;}if( input == '1')//按1键游戏暂停{while(1){input=getch();if(input == '1')//再按1键游戏继续break;}}}
}int main(void)
{startup();//数据的初始化while(1){show();//显示画面HideCursor();//隐藏光标,防止光标乱闪。updateWithoutInput();//与用户输入无关的更新updateWithInput();//与用户输入有关的更新}return 0;
}
效果图如下:
项目: 用封装的方法实现飞机大战游戏相关推荐
- 基于Java的飞机大战游戏的设计与实现论文
源码下载 http://www.byamd.xyz/hui-zong-1/ 摘 要 现如今,随着智能手机的兴起与普及,加上4G(the 4th Generation mobile communicat ...
- 基于Java的飞机大战游戏的设计与实现(含源文件)
欢迎添加微信互相交流学习哦! 项目源码:https://gitee.com/oklongmm/biye 基于Java的飞机大战游戏的设计与实现 摘 要 现如今,随着智能手机的兴起与普及,加上4G( ...
- 【java毕业设计】基于java+Eclipse的飞机大战游戏设计与实现(毕业论文+程序源码)——飞机大战游戏
基于java+Eclipse的飞机大战游戏设计与实现(毕业论文+程序源码) 大家好,今天给大家介绍基于java+Eclipse的飞机大战游戏设计与实现,文章末尾附有本毕业设计的论文和源码下载地址哦. ...
- 基于Java的飞机大战游戏的设计与实现(论文+源码)
毕业设计(论文)任务书 第1页 毕业设计(论文)题目:基于Java的飞机大战游戏的设计与实现毕业设计(论文)要求及原始数据(资料):1.综述基于Java的飞机大战游戏的现状:2.深入了解Java的设计 ...
- 基于Java Swing 飞机大战游戏
一.项目概要: 基于Java Swing飞机大战游戏,打死飞机,可以随机出现加血包.子弹升级包.并支持根据游戏的分数,调整游戏难度. 二.界面展示: 三.主要代码: package com.maoxu ...
- pygame小项目 ~ 3 :Python完成简易飞机大战
pygame小项目 ~ 3 :Python完成简易飞机大战 子弹 敌机 我方战斗机全部采用图片 子弹击中和战斗机被击中全部采用碰撞检测 游戏的主函数代码 import spite from spite ...
- 基于pygame实现的飞机大战游戏
目录 1.引言 1.1 背景 1.2 意义 1.3 功能 2.系统结构 2.1 整体框架 2.2 精灵与精灵组 2.3 功能介绍 2.3.1 玩家飞机 2.3.2 敌机类型和关卡设定 2.3.3 敌机 ...
- Android studio飞机大战游戏分析-月末总结
整体实现思路 绘制循环滚动的背景图片创建BackGround类 绘制飞机和子弹.创建Myplane和Bullet类 在Myplane中构造isCollision绘制飞机与boss飞机的碰撞,飞机与子弹 ...
- python飞机大战游戏高级_05.python实现飞机大战游戏
python的核心编程跟着学习完了,终于到了第一个实战项目的演练,很是激动. 按着黑马老师指导的思路,代码主要分成两个模块主模块plane_main.py和工具模块plane_sprites.py. ...
最新文章
- 无需额外数据,首次实现ImageNet 87.1% 精度,颜水成团队开源VOLO
- 行业B2B网站策划6个基本要求
- python 调用shell命令的方法
- oracle audit for 11g
- 因贡献Linux社区被Linus关注,受公司10万期权奖励!酷派重回大众视野...
- gradle之gradlew最全指令攻略
- zk ui_高级ZK:异步UI更新和后台处理–第2部分
- 工作111:直接写url
- 32获取外部中断状态_Linux中断一网打尽(1) — 中断及其初始化
- python 桌面歌词_GitHub - Python-Z/musicbox: 网易云音乐命令行版本
- 山东联通中兴B860 AV1.1机顶盒 刷机问题解决
- ps使用抽出滤镜抠头发
- 2010年中国企业500强
- 从IT时代到DT时代
- 开发者,熊二都会的Linux入门
- 关系型数据库的物理连接
- 物联网安全风险威胁报告
- Non-Interactive Guessing Number
- pdf裁边app_Paper for Kindle
- perl mysql 数据推拉_用perl 从mysql取出数据做统计分析代码