打飞机小游戏c++窗口实现版
#include <stdio.h>
#include <stdlib.h>
#include <conio.h>
#include <time.h>
#include <windows.h>
#define high 25 //画布高
#define width 60 //画布宽
#define border -1 //边界
#define blank 0 //空白
#define plane 1 //飞机
#define bullet 2 //子弹
#define enemy 3 //敌机
#define destroy 4 //摧毁标记
int canvas[high + 2][width + 2]; //游戏场景的高和宽
int pos_h, pos_w; //飞机位置
int enemynum; //敌机数量
int interval; //同个计次来模拟时间间隔
int itv_move; //敌机移动的时间间隔
int itv_new; //敌机刷新的时间间隔
int score; //分数
int IsOver; //判断游戏是否结束
void Startup(); //游戏数值初始化
void Show(); //游戏界面输出
void UpdateInput(); //因输入导致的游戏状态更新
void UpdateNormal(); //与输入无关的游戏状态更新
void HideCursor(); //隐藏光标
void gotoxy(int x, int y); //回调光标
int main()
{Startup(); //初始化while (IsOver){ //游戏循环UpdateInput();UpdateNormal();Show();}printf("\t\tgame over!\n");Sleep(2500); //暂停游戏结束界面(毫秒)system("pause");return 0;
}
void Startup()
{ //游戏数值初始化IsOver = 1;score = 0; //初始化分数for (int i = 0; i < high + 2; i++){ //初始化画布for (int j = 0; j < width + 2; j++){if (i == 0 || i == high + 1 ||j == 0 || j == width + 1){canvas[i][j] = border;}elsecanvas[i][j] = blank;}}pos_h = high / 2; //初始化飞机竖直坐标pos_w = width / 2; //初始化飞机水平坐标canvas[pos_h][pos_w] = plane; //初始化飞机位置enemynum = 3; //敌机数量srand(time(NULL));interval = 4; //初始化时间间隔计数itv_move = 5; //初始化敌机移动时间间隔itv_new = 40; //初始化敌机刷新时间间隔
}
void Show()
{ //游戏界面输出HideCursor(); //隐藏光标gotoxy(1, 1); //回调光标、刷新画面for (int i = 0; i < high + 2; i++){for (int j = 0; j < width + 2; j++){if (canvas[i][j] == plane){ //当前位置为飞机位置printf("*");}else if (canvas[i][j] == bullet){ //当前位置为子弹位置printf("|");}else if (canvas[i][j] == enemy){ //当前位置为敌机位置printf("@");}else if (canvas[i][j] == border){ //当前位置为边界printf("#");}else if (canvas[i][j] == blank){ //当前位置无物,且在边界内printf(" ");}else if (canvas[i][j] == destroy){ //当前位置无物,且在边界内printf("x");}}printf("\n");}printf("\n得分:%d", score);
}
void UpdateInput()
{ //因输入导致的游戏状态更新char key_W = GetKeyState('W'), //监测 W 键是否按下key_S = GetKeyState('S'), //监测 S 键是否按下key_A = GetKeyState('A'), //监测 A 键是否按下key_D = GetKeyState('D'), //监测 D 键是否按下key_attack = GetKeyState(' '); //监测 空格 键是否按下if (kbhit()){ //当有键按下时 //vc++6.0以上版本为 _kbhit()if (key_W < 0){ //当按下 W 键,上移if (pos_h > 1){canvas[pos_h][pos_w] = blank;if (canvas[pos_h - 1][pos_w] == enemy){ //下个位置是敌机,撞毁canvas[pos_h - 1][pos_w] = destroy;IsOver = 0;}elsecanvas[--pos_h][pos_w] = plane;}}if (key_S < 0){ //当按下 S 键,下移if (pos_h < high){canvas[pos_h][pos_w] = blank;if (canvas[pos_h + 1][pos_w] == enemy){ //下个位置是敌机,撞毁canvas[pos_h + 1][pos_w] = destroy;IsOver = 0;}elsecanvas[++pos_h][pos_w] = plane;}}if (key_A < 0){ //当按下 A 键,左移if (pos_w > 1){canvas[pos_h][pos_w] = blank;if (canvas[pos_h][pos_w - 1] == enemy){ //下个位置是敌机,撞毁canvas[pos_h][pos_w - 1] = destroy;IsOver = 0;}elsecanvas[pos_h][--pos_w] = plane;}}if (key_D < 0){ //当按下 D 键,右移if (pos_w < width){canvas[pos_h][pos_w] = blank;if (canvas[pos_h][pos_w + 1] == enemy){ //下个位置是敌机,撞毁canvas[pos_h][pos_w + 1] = destroy;IsOver = 0;}elsecanvas[pos_h][++pos_w] = plane;}}if (key_attack < 0){ //当按下空格键,发射子弹if (pos_h != 1)canvas[pos_h - 1][pos_w] = bullet;}}
}
void UpdateNormal()
{ //与输入无关的游戏状态更新int temp[high + 2][width + 2]; //用来判断原位置的临时数组for (int i = 1; i <= high; i++){for (int j = 1; j <= width; j++){temp[i][j] = canvas[i][j];}}for (int i = 1; i <= high; i++){ //遍历临时数组,修改画布for (int j = 1; j <= width; j++){if (temp[i][j] == enemy && interval % itv_move == 0){ //当前位置为敌机canvas[i][j] = blank;if (temp[i + 1][j] == bullet){ //下面为子弹,敌机被击中canvas[i + 1][j] = blank;score++;printf("\a"); //击中音效}else if (i < high){canvas[i + 1][j] = enemy;}if (i + 1 == pos_h && j == pos_w){ //下面为飞机,玩家飞机被撞毁canvas[i + 1][j] = destroy;IsOver = 0;}}if (temp[i][j] == bullet){ //当前位置为子弹canvas[i][j] = blank;if (temp[i - 1][j] == enemy){ //下个位置是敌机,敌机被击毁canvas[i - 1][j] = blank;score++;printf("\a");}else if (i > 1){canvas[i - 1][j] = bullet;}}}}if (interval % itv_new == 0) //刚好到时间间隔for (int i = 0; i < enemynum; i++){ //新增敌机群canvas[rand() % 2 + 1][rand() % width + 1] = enemy;}if (interval <= 100){ //时间间隔计次interval++;}else{ //时间间隔计次清零interval = 0;}
}
void gotoxy(int x, int y)
{ //回调光标COORD pos;pos.X = x - 1;pos.Y = y - 1;SetConsoleCursorPosition(GetStdHandle(STD_OUTPUT_HANDLE), pos);
}
void HideCursor()
{ //隐藏光标函数CONSOLE_CURSOR_INFO cursor;cursor.bVisible = FALSE;cursor.dwSize = sizeof(cursor);HANDLE handle = GetStdHandle(STD_OUTPUT_HANDLE);SetConsoleCursorInfo(handle, &cursor);
}
打飞机小游戏c++窗口实现版相关推荐
- java打飞机小游戏(跟着网上视频写到)
package 飞机小游戏; //如果觉得好的话,给一点积分哦,太痛苦了,平时下一点资料都得需要 import java.awt.Color; import java.awt.Font; import ...
- Java版打飞机小游戏
放假写的一个Java端打飞机小游戏. 复习到的知识点有:java图形界面,多线程,集合框架等. 主要的收获是知道了处理图层的方式,即JLayeredPane层次面板,主要思路 如下: 1. ...
- 用JAVA写个飞机小游戏玩玩吧
闲来无事写了个飞机小游戏. 设定很简单,子弹打到飞机就结束游戏. 实现步骤如下,有问题可以评论区讨论: 首先建立一个PlayGame项目和它之下的包: MyGameFrame(游戏实现)类: pack ...
- C语言射击类打飞机小游戏
使用c语言编写一个打飞机小游戏,使用键盘按键来进行游戏,击中敌机可获得积分,被敌机撞中死亡一次,每次游戏有3次机会. 在网上查询资料并且和同学讨论之后,对原来的代码有了一些改进, 改进:增加了颜色函数 ...
- Java飞机小游戏制作简单实现详细小结
567881@ftJava小游戏开发 Java飞机小游戏制作简单实现小结 本人原来是个技术小白,寒假我跟着高淇老师的Java300集开始自学Java,跟着做了一个飞机大战小游戏,已经实现了飞机的自由移 ...
- 编程语言用 Java 开发一个打飞机小游戏(附完整源码)
编程语言用 Java 开发一个打飞机小游戏(附完整源码) 上图 写在前面 技术源于分享,所以今天抽空把自己之前用java做过的小游戏整理贴出来给大家参考学习.java确实不适合写桌面应用,这里只是通过 ...
- 视频教程-JavaScript打飞机小游戏视频教程-JavaScript
JavaScript打飞机小游戏视频教程 拥有6年web前端和后端开发经验,4年授课经验,还曾在百度专业培训过网络营销课程,曾就职于联想集团和当当网,不仅有丰富的项目实战经验还有营销经验,综合实力较强 ...
- Android 打飞机 小游戏 的实现 - 画面移动 对象封装 碰撞效果
打飞机小游戏 *1.画背景 *2.画飞机 *3.画小怪 *4.画子弹 *--背景,飞机.小怪.子弹各有draw和move方法 public class MainActivity extends ...
- 微信打飞机小游戏的尝试
微信打飞机小游戏的尝试 问题:微信打飞机游戏出现不断跳出的问题 原因:未加return.
- c语言射击类打飞机小游戏感悟
c语言:简单飞机射击小游戏 使用c语言编写一个打飞机小游戏,使用键盘按键来进行游戏,操作方法是"a""d""w"或者"←" ...
最新文章
- 一文读懂深度学习中的各种卷积
- 三大深度学习生成模型:VAE、GAN及其变种
- c++ 解析从浏览器端传过来的图像base64编码,并转换成opencv识别的格式
- MySQL Cluster 配置详细介绍
- [Bug]The maximum array length quota (16384) has been exceeded while reading XML data.
- ASP.NET Core 沉思录 - 结构化日志
- oracle导数卡死,oracle-审计导数
- linux8安装ftp服务,CentOS8.0 安装配置ftp服务器的实现方法
- TabBar与下拉列表访问数据与刷新
- 浏览器兼容:改写window.showModalDialog
- 转载:性能计数器分析
- windows 任务管理中各个内存项的含义
- 自带公网IP上阿里云 | 凌云时刻
- 北京地铁和广州地铁之感想
- Excel工作表丨使用Excel表格直接添加条码/二维码
- 3-19日 游戏工坊博客
- 程序员期望月薪那些事儿
- 一元二次方程abc决定什么_二次函数中的a,b,c各决定什么?
- 名帖84 米芾 小楷《九歌》
- WebRTC 报错:Failed to set remote offer sdp: Called with SDP without DTLS fingerprint