目录

  • 一、项目描述和最终的成果展示
  • 二、用函数进行封装
  • 三、新型的发射子弹功能
  • 四、实现移动的敌机功能和更正屏幕闪烁,清除光标功能
  • 五、订正一些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;
}

效果图如下:

项目: 用封装的方法实现飞机大战游戏相关推荐

  1. 基于Java的飞机大战游戏的设计与实现论文

    源码下载 http://www.byamd.xyz/hui-zong-1/ 摘 要 现如今,随着智能手机的兴起与普及,加上4G(the 4th Generation mobile communicat ...

  2. 基于Java的飞机大战游戏的设计与实现(含源文件)

    欢迎添加微信互相交流学习哦! 项目源码:https://gitee.com/oklongmm/biye 基于Java的飞机大战游戏的设计与实现 摘   要 现如今,随着智能手机的兴起与普及,加上4G( ...

  3. 【java毕业设计】基于java+Eclipse的飞机大战游戏设计与实现(毕业论文+程序源码)——飞机大战游戏

    基于java+Eclipse的飞机大战游戏设计与实现(毕业论文+程序源码) 大家好,今天给大家介绍基于java+Eclipse的飞机大战游戏设计与实现,文章末尾附有本毕业设计的论文和源码下载地址哦. ...

  4. 基于Java的飞机大战游戏的设计与实现(论文+源码)

    毕业设计(论文)任务书 第1页 毕业设计(论文)题目:基于Java的飞机大战游戏的设计与实现毕业设计(论文)要求及原始数据(资料):1.综述基于Java的飞机大战游戏的现状:2.深入了解Java的设计 ...

  5. 基于Java Swing 飞机大战游戏

    一.项目概要: 基于Java Swing飞机大战游戏,打死飞机,可以随机出现加血包.子弹升级包.并支持根据游戏的分数,调整游戏难度. 二.界面展示: 三.主要代码: package com.maoxu ...

  6. pygame小项目 ~ 3 :Python完成简易飞机大战

    pygame小项目 ~ 3 :Python完成简易飞机大战 子弹 敌机 我方战斗机全部采用图片 子弹击中和战斗机被击中全部采用碰撞检测 游戏的主函数代码 import spite from spite ...

  7. 基于pygame实现的飞机大战游戏

    目录 1.引言 1.1 背景 1.2 意义 1.3 功能 2.系统结构 2.1 整体框架 2.2 精灵与精灵组 2.3 功能介绍 2.3.1 玩家飞机 2.3.2 敌机类型和关卡设定 2.3.3 敌机 ...

  8. Android studio飞机大战游戏分析-月末总结

    整体实现思路 绘制循环滚动的背景图片创建BackGround类 绘制飞机和子弹.创建Myplane和Bullet类 在Myplane中构造isCollision绘制飞机与boss飞机的碰撞,飞机与子弹 ...

  9. python飞机大战游戏高级_05.python实现飞机大战游戏

    python的核心编程跟着学习完了,终于到了第一个实战项目的演练,很是激动. 按着黑马老师指导的思路,代码主要分成两个模块主模块plane_main.py和工具模块plane_sprites.py. ...

最新文章

  1. 无需额外数据,首次实现ImageNet 87.1% 精度,颜水成团队开源VOLO
  2. 行业B2B网站策划6个基本要求
  3. python 调用shell命令的方法
  4. oracle audit for 11g
  5. 因贡献Linux社区被Linus关注,受公司10万期权奖励!酷派重回大众视野...
  6. gradle之gradlew最全指令攻略
  7. zk ui_高级ZK:异步UI更新和后台处理–第2部分
  8. 工作111:直接写url
  9. 32获取外部中断状态_Linux中断一网打尽(1) — 中断及其初始化
  10. python 桌面歌词_GitHub - Python-Z/musicbox: 网易云音乐命令行版本
  11. 山东联通中兴B860 AV1.1机顶盒 刷机问题解决
  12. ps使用抽出滤镜抠头发
  13. 2010年中国企业500强
  14. 从IT时代到DT时代
  15. 开发者,熊二都会的Linux入门
  16. 关系型数据库的物理连接
  17. 物联网安全风险威胁报告
  18. Non-Interactive Guessing Number
  19. pdf裁边app_Paper for Kindle
  20. perl mysql 数据推拉_用perl 从mysql取出数据做统计分析代码

热门文章

  1. js 数组 转为树形结构
  2. Android 2018最新验证手机号正则表达式
  3. WinForm界面设计优化过程
  4. JQuery DOM基本操作
  5. 强碱性食品 高嘌呤食物
  6. inet_aton和inet_network和inet_addr三者比较-《别怕Linux编程》之五
  7. ESP8266/ESP32 NVS 基本操作
  8. 波卡链Substrate (6)Babe协议二“分配slot机制”
  9. (chap5 web服务器) 保存资源的缓存
  10. Kubernetes客户端client-go简介