C语言坐标打飞机,C语言控制台实现打飞机小游戏

本文实例为大家分享了C语言实现打飞机小游戏的具体代码,供大家参考,具体内容如下

初学C语言总觉得不能做些什么好玩的,这个小游戏只需 “一点点” (千真万确)C语言知识就能完成!

总计不到200行的非空白代码(没有强行压缩行数)

88e0112d051c1f48a7afca432106dc93.gif

操作说明:

1.W、S、A、D 控制 上 、下、左、右 方向,空格 攻击

2.每击中一架敌机增加1分,界面下方显示实时分数

3.撞到敌机后显示 game over!2.5秒(时间可更改)

子弹连发

移动的同时发射子弹

飞机撞上敌机结束游戏

可通过更改相关变量的值来调节敌机飞行速度、敌机密度、敌机刷新速度等

相比与上一个极度简陋版,功能基本完善

所需C语言知识真的不多,感兴趣的C程序员朋友来复刻吧!

以下是详细注释的源代码:

#include

#include

#include

#include

#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(); //因输入导致的游戏状态更新

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

for(int j=0;j

if(i==0 || i==high+1 ||

j==0 || j==width+1){

canvas[i][j]=border;

}

else canvas[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

for(int j=0;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()){ //当有键按下时

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;

}

else canvas[--pos_h][pos_w]=plane;

}

}

if(key_S<0){ //当按下 S 键,下移

if(pos_h

canvas[pos_h][pos_w]=blank;

if(canvas[pos_h+1][pos_w] == enemy){ //下个位置是敌机,撞毁

canvas[pos_h+1][pos_w]= destroy;

IsOver=0;

}

else canvas[++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;

}

else canvas[pos_h][--pos_w]=plane;

}

}

if(key_D<0){ //当按下 D 键,右移

if(pos_w

canvas[pos_h][pos_w]=blank;

if(canvas[pos_h][pos_w+1] == enemy){ //下个位置是敌机,撞毁

canvas[pos_h][pos_w+1]= destroy;

IsOver=0;

}

else canvas[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

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

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);

}

更多有趣的经典小游戏实现专题,分享给大家:

以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持脚本之家。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/563424.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

jquery 获取键值对中最大值_jQuery的AJAX发送数据键值对

在我的aspx页面&#xff0c;我对JS是这样的&#xff1a; -jQuery的AJAX发送数据键值对$("#btnLoad").click(function() {var dataForAjax "{datakey:hello}"$.ajax({type: "POST",url: "Ajax__Demo.aspx/SendFile",data: dataForAjax…

一般最小二乘法 c语言,最小二乘法C语言的实现(7页)-原创力文档

实验三 .最小二乘法C语言的实现1.实验目的&#xff1a;进一步熟悉曲线拟合的最小二乘法。掌握编程语言字符处理程序的设计和调试技术。2.实验要求&#xff1a;输入&#xff1a;已知点的数目以及各点坐标 。输出&#xff1a;根据最小二乘法原理以及各点坐标求出拟合曲线 。3.程序…

合同相似可逆等价矩阵的关系及性质_行列式的性质问题

行列式的学习一方面要掌握计算行列式的一般方法&#xff1b;对性质要理解。考点与要求&#xff1a;了解&#xff1a;行列式的概念、方阵的乘积、行列式的性质&#xff1b;掌握&#xff1a;行列式的性质&#xff1b;会用&#xff1a;行列式的性质和行列式按行(列)展开定理计算行…

查找整数c语言编程,关于算法:查找整数的位数

查找正整数的位数的最佳方法是什么&#xff1f;我发现了这3种基本方法&#xff1a;转换为字符串String s new Integer(t).toString();int len s.length();for循环for(long long int temp number; temp > 1;){temp/10;decimalPlaces;}对数计算digits floor( log10( numbe…

c++ windows 蓝牙库_蓝牙翻页笔(PPT 控制器) | ESP32学习之旅-Arduino版

本系列历史文章目录&#xff1a;ESP32概述与Arduino软件准备新冠肺炎疫情数据实时显示器B 粉计数器本期给大家带来的案例是&#xff1a;蓝牙翻页笔。先来看一下演示视频吧&#xff1a;蓝牙翻页笔 | PPT播放控制器 | 蓝牙键盘 | 用 Arduino 玩转掌控板 ESP32 / ESP8266 | 图形化…

c语言课程设计2018,C语言课程设计报告(2018)——学生管理系统(17页)-原创力文档...

兰州交通大学博文学院《C语言程序设计》课 程 设 计 报 告系 别&#xff1a; 交通运输系班 级&#xff1a; 16交通运输(3)班姓 名&#xff1a;学 号&#xff1a;指导老师&#xff1a;2018年1月5日兰州交通大学博文学院交通运输系课程设计成绩评定表学生姓名班 级学 号导师姓名职…

python 程序运行在阿里云主机_阿里云主机Access key利用工具

简介&#xff08;Gamma实验室核心成员&#xff1a;一灯老和尚所写&#xff09;在日常渗透过程中我们经常遇到信息泄露出ALIYUN_ACCESSKEYID与ALIYUN_ACCESSKEYSECRET&#xff08;阿里云API key&#xff09;&#xff0c;特别是laravel框架得debug信息。APP中也会泄露这些信息&am…

c语言中case1 case3 n =1,(n 1)-Step Derivations on n-Groupoids: The Case n = 3

摘要&#xff1a;We define a ranked trigroupoid as a natural followup on the idea of a ranked bigroupoid. We consider the idea of a derivation on such a trigroupoid as representing a two-step process on a pair of ranked bigroupoids where the mapping d is a …

输入数字存入数组C语言,//从键盘上输入若干整数,并将其存入数组中,并统计输入数据的个...

该楼层疑似违规已被系统折叠 隐藏此楼查看此楼//从键盘上输入若干整数&#xff0c;并将其存入数组中&#xff0c;并统计输入数据的个数。#include#include#include#includeint sum_num(char [],int []);int cou_num(char [][81],int,int[]);int txt(char [][81],int);//主函数m…

一张纸厚度是多少毫米_一张纸的威力有多大?纸折103次捅破宇宙,理论荒诞却无法反驳...

【图文摘自网络&#xff0c;如有侵权请联系删除】人类达到月球需要多久时间&#xff1f;地球和月亮的距离不是一成不变的&#xff0c;它有着近地点和远地点&#xff0c;地球里月球最远的距离在363300千米&#xff0c;最远为405500千米。而当年阿波罗号由火箭发射到登陆月球表面…

c语言中结构体类型只有,C语言中main()函数不要返回结构体类型(求助)

大家先看一下这段程序&#xff1a;#include typedef unsigned char bool;typedef struct _person person;struct _person {bool sex;};person main() {person xingwang;xingwang.sex 0;return xingwang;}如此简单清晰的程序&#xff0c;您觉得会报错吗&#xff1f;如果您和我一…

oracle 两表两列数据对比_Oracle、PostgreSQL与Mysql数据写入性能对比

最近因为工作需要&#xff0c;需要对Oracle和Mysql写入性能进行对比&#xff0c;以前都是听说Mysql性能比Oracle不是一个级别&#xff0c;现在亲测后&#xff0c;不比不知道&#xff0c;一比吓一跳。。。追加PostgreSql性能测试数据测试场景本地电脑(单机)&#xff0c;通过程序…

锐驰机器人的市场_【年终盘点】2020年,锐驰的王炸新品!

点击蓝字关注我哦辛苦付出、苦熬实干&#xff0c;换来了硕果累累、丰收成片。回首2020年&#xff0c;锐驰秉承着锐意进取、快速创新的理念&#xff0c;在自动化道路上不断探索&#xff0c;推出了多款智能自动化机器&#xff0c;现在着重介绍以下3款&#xff1a;异型插件机器人、…

c语言语音控制游戏文献,C语言课程设计-基于C语言推箱子游戏设计-毕业论文文献.doc...

gd工程职业技术学院毕业论文基于C语言的推箱子游戏设计Design of the push box Based on Combined Language作者姓名&#xff1a;学科专业&#xff1a; 应用电子技术学院(系部)&#xff1a; 机电工程系指导教师&#xff1a;gd工程职业技术学院2013年1月摘要近年来随着科技的飞速…

学生管理系统c#语言代码,基于C#语言的学生管理系统的设计(ASP.NET2.0)

摘 要随着科学技术的不断提高,计算机科学日渐成熟,其强大的功能已为人们深刻认识,它已进入人类社会的各个领域并发挥着越来越重要的作用。学生管理系统是学校管理中不可少的一部分。而基于B/S架构的学生管理系统是方便学校管理&#xff0c;实行电子办公的必要组成部分&#xf…

异常信息_一个针对异常信息通知的springboot starter

前言作为后端开发者&#xff0c;项目上线之后难免会遇到各种问题&#xff0c;一个良好且及时的异常通知机制可以让我们在项目的维护上避免很多不必要的麻烦。本项目的开发愿景是为了给使用者在线上项目的问题排查方面能够带来帮助&#xff0c;简单配置&#xff0c;做到真正的开…

2使用教学_建水三中智能交互式液晶一体机设备投入使用

“张老师&#xff0c;一体机的使用会了吗&#xff1f;”“一体机在教学中好用吗&#xff1f;”“告别多年粉笔加黑板的教学方式&#xff0c;不用再吸入粉笔灰了。”2月25日清晨&#xff0c;建水三中的老师们议论纷纷&#xff0c;大家关注的是如何操作使用教室里安装的一体机。建…

数据结构折半查找算法C语言,数据结构C语言实现----折半查找

运行结果&#xff1a;代码如下&#xff1a;#include//数组初始化函数void Array_get(int array[],int max){printf("请输入一个数组&#xff0c;大小从低到高&#xff0c;各个数字间以空格隔开&#xff1a;");for (size_t i 0; i < max; i){scanf("%d"…

生活中的算法的实际举例_驾校学的技术,在实际生活中,你能运用自如吗?

学驾照的过程不用说&#xff0c;每一个经历过的人都有着刻骨铭心的记忆。很多人认为自己流了很多汗水&#xff0c;付出了很多精力在练车场上摸爬滚打&#xff0c;这下肯定把驾驶技术给夯实了&#xff0c;以后开车上路一点问题也没有。但是事情真的是这样吗&#xff0c;驾校学的…

c语言万年历设计背景,万年历设计报告

该楼层疑似违规已被系统折叠 隐藏此楼查看此楼#include#includechar* month_str[]{"January","February","March","April","May","June","July","August","September","Octob…