飞机游戏(修改版)及其结构分析


#include <stdio.h>

#include <conio.h>

#include <stdlib.h>

#include <time.h>

#define N 35

void print(int[][N]);//输出函数

void movebul(int[][N]);//子弹移动函数

void movepla(int[][N]);//敌机移动函数

void setting(void);//设置函数

void menu(void);//菜单函数

void oper(void);//操作函数

//全局变量:

int scr[22][N] = { 0 };    //界面数组

int pl = 9, x = 21;    //我机初始位置

int width = 24, speed = 3, density = 10, score = 0, death = 0;    // 敌机速度、敌机密度、得分、死亡

int main(void)

{

menu();

oper();

}

void oper()

{

int i = 0, j = 0;

scr[x][pl] = 1;    //初始化我机位置和敌机位置

scr[0][5] = 3;

scr[8][4] = 3;

scr[2][7] = 3;

scr[5][4] = 3;

scr[6][4] = 3;

//初始化完毕

while (1)

{

if (_kbhit())

switch (_getch())//控制左右移动和进入菜单

{

case ‘a‘:case ‘A‘:

if (pl > 0)

scr[x][pl] = 0, scr[x][--pl] = 1;

break;

case ‘d‘:case ‘D‘:

if (pl < width - 2)

scr[x][pl] = 0, scr[x][++pl] = 1;

break;

case ‘q‘:case ‘Q‘:

if (x>0)

scr[x][pl] = 0, scr[--x][pl] = 1;

break;

case ‘e‘:case ‘E‘:

if (x < 21)

scr[x][pl] = 0, scr[++x][pl] = 1;

break;

case ‘w‘:case ‘W‘:

scr[x - 1][pl] = 2;

break;

case 27:

setting();

break;

}

if (++j%density == 0)//控制生产敌机的速度

{

j = 0; srand(time(NULL));

scr[0][rand() % width] = 3;

}

if (++i%speed == 0)//控制敌机移动速度,相对于子弹移动速度

movepla(scr);

movebul(scr);

print(scr);

if (i == 30000)

i = 0;//以免i 越界

}

}

void print(int a[][N])

{

system("cls");

int i, j;

for (i = 0; i<22; i++)

{

a[i][width - 1] = 4;

for (j = 0; j<width; j++)

{

if (a[i][j] == 0)

printf(" ");

if (a[i][j] == 1)

printf("\5");//输出我机的符号

if (a[i][j] == 2)

printf(".");//子弹

if (a[i][j] == 3)

printf("\3"); //输出敌机符号

if (a[i][j] == 4)

printf("|");

if (i == 0 && j == width - 1)

printf("得分:%d", score);//右上角显示得分

if (i == 1 && j == width - 1)

printf("死亡:%d", death);

if (i == 2 && j == width - 1)

printf("设置:Esc");

if (i == 3 && j == width - 1)

printf("Copyright:ssd");

}

printf("\n");

}

}

void movebul(int a[][N])

{

int i, j;

for (i = 0; i<22; i++)

for (j = 0; j<width; j++)

{

if (i == 0 && a[i][j] == 2)

a[i][j] = 0;

if (a[i][j] == 2)

{

if (a[i - 1][j] == 3)

score += 10, printf("\7");

a[i][j] = 0, a[i - 1][j] = 2;

}

}

}

void movepla(int a[][N])

{

int i, j;

for (i = 21; i >= 0; i--)//从最后一行往上是为了避免把敌机直接冲出数组。

for (j = 0; j<width; j++)

{

if (i == 21 && a[i][j] == 3)

a[i][j] = 0;//底行赋值0 以免越界。

if (a[i][j] == 3) {

a[i][j] = 0;

a[i + 1][j] = 3;

if (a[i + 1][j] == 1) {

death++;a[i][j]=0;

}

}

}

}

void setting(void)

{

int sw = 0, i, j;

system("cls");

do {

sw = 0; printf("\n 游戏界面的大小:1.大2.小>> ");

switch (_getche())

{

case ‘1‘:

width = 34;

break;

case ‘2‘:

width = 24;

break;

default:

printf("\n 错误,请重新选择...\n");

sw = 1;

}

} while (sw);

do

{

sw = 0;

printf("\n 请选择敌机密度:1.大2.中3.小>> ");

switch (_getche())

{

case ‘0‘:

density = 10;

break;

case ‘1‘:

density = 20;

break;

case ‘2‘:

density = 30;

break;

case ‘3‘:

density = 40;

break;

default:

printf("\n 错误,请重新选择...\n");

sw = 1;

}

} while (sw);

do

{

sw = 0;

printf("\n 敌机的飞行速度:1.快2.中3.慢>> ");

switch (_getche())

{

case ‘1‘:

speed = 2;

break;

case ‘2‘:

speed = 3;

break;

case ‘3‘:

speed = 4;

break;

default:

printf("\n 错误,请重新选择...\n");

sw = 1;

}

} while (sw);

for (i = 0; i<22; i++)

for (j = 0; j<45; j++)

scr[i][j] = 0;

scr[21][pl = 9] = 1;

printf("\n 按任意键保存...");

_getch();

}

void menu(void)

{

printf("说明:按A D 控制我机左右飞行,QE控制我机上下飞行,W 发射子弹\n 设置:请按Esc\n 开始游戏:任意键\n                               by yan_xu");

if (_getch() == 27)

setting();

修改方面如下:

  1. 增加敌机数量
  2. 加快敌机生成速度
  3. 飞机能够上下移动

代码分析:

1.首先定义函数

2.定义函数类型,屏幕宽度,速度,敌机密度,得分,死亡int scr[22][N]={0},pl=9,width=24,speed=3,density=30,score=0,death=0; 此程序用到整形int.
3.控制飞机的移动坐标:输入A:飞机在x轴向左移动一格 。输入D: 飞机在x轴向右移动一格,输入Q:飞机在y轴上移一格,输入E:飞机在y轴下移一格,w是出子弹的位置,初始位置在飞机位置y轴上减少一格。
4.加分死亡规则:如果子弹的坐标和敌机的坐标y值相同,x值相差一则子弹击中敌机,加分。反之敌机坐标和我机的坐标y值相同,x值相差一则我机死亡。
5.临界位置:坐标区域有限规定不能超出屏幕大小。
6.设置界面大小飞机速度,敌机密度以及控制方向的键。

学号:150206210

时间: 2024-08-01 12:34:47

飞机游戏(修改版)及其结构分析的相关文章

飞机游戏程序

C语言的基本语句功能的体会和"飞机游戏"的结构分析 通过今天对于C语言结构的学习,我对于C语言的基本功能语句所能时限的功能感到不可思议,短短的几段简单的程序就能完成看似如此复杂的事情. 就如今天学习的"飞机游戏",我们可以把如此复杂的程序分成main,print,movebul, movepla,setting和menu6大块. 1 首先是main 函数 /全局变量:界面.我机初始位.界面宽度.敌机速度.敌机密度.得分.死亡 main(void) { menu();

13.1-全栈Java笔记:打飞机游戏实战项目|AWT技术|MyGameFrame

简介和项目目标 通过游戏项目学习整个Java基础知识体系,我们做了精心的设计,让每一章知识都能获得应用. 比如:多线程用来实现动画效果.容器实现对于多发炮弹的存取和处理.常用类等等的应用. 寓教于乐,让大家迅速入门,更希望通过喜闻乐见的小游戏,让大家爱上编程,爱上"程序员". 老鸟建议 很多朋友会疑惑:"游戏项目,又不能拿到企业面试中,为什么要讲?" 这是一种太过于功利的想法.就像,我们说:"今天吃个馒头,又不是长高,为什么要吃呢?" 游戏项目的

C语言应用-飞机游戏

在第一次的C语言程序设计课上我们第一次接触到将近200行程序的大型程序.即使现在已经将这个程序分析的十分清楚,但是每次看到这么多的程序还是令我感到头痛不已. 这个大型的程序是一个基础的飞机类型的游戏.虽然比我们现在手机上.电脑上玩的游戏要简陋不止几百倍而且由于它是利用C语言的循环语句进行输出所以在玩的时候总是在不停地闪烁使人有些头晕.但我还是觉得异常有趣. printf这个函数在这个飞机游戏中用来显示和输出整个游戏.发现printf这个函数不仅仅是用来简单的输出,还可以配合getch()这个函数

关于《飞机游戏软件:C语言应用初步感受》的感想

C语言课程设计的第一节课,老师提供了一个C语言的飞机游戏让我们感受. 首先安装c-free,然后是将代码贴进去运行, 界面虽然有点简单,但是真正的游戏,C语言还能做这么有意思的东西,真是没有想到. 这是第一次认为C语言是个神奇的语言,竟然可以编写出游戏来. 用到的语句也很简单. 比如:#include<stdio.h>等,都是以前学过的知识,真的是想要好好学习一下C语言,争取自己编写个小程序出来.

彭界博-飞机游戏

根据老师提供的飞机游戏,经过自己的理解,稍有改动.其源代码如下: #include <stdio.h> #include <conio.h> #include <stdlib.h> #include <time.h> #define N 35 void print(int [][N]);//输出函数 void movebul(int [][N]);//子弹移动函数 void movepla(int [][N]);//敌机移动函数 void setting(v

飞机游戏程序修改及感想

根据老师提供的飞机游戏程序,我仔细观察了游戏的运行方式及一些程序的细节,并做出了一些修改,程序如下: #include <stdio.h> #include <conio.h> #include <stdlib.h> #include <time.h> #define N 35 void print(int [][N]);//输出函数 void movebul(int [][N]);//子弹移动函数     (通过两个函数来控制子弹和敌机的移动) void

蓝懿 iOS 打飞机游戏实现步骤

昨天打算回宿舍写,到宿舍忽然想起宿舍没网,今天一早补上,今天是练习日,十点上课,晚上八点自习结束,这两天讲的大部分都是训练营讲过的内容,所以我感觉分外轻松! 昨天由于前两天讲的对与新来的同学来说内容过多,所以上午只把前一天留下的作业讲了一下,下午只讲方法的调用与生成:之后大家一起看了一部电影作为放松! -(返回值类型)方法名称参数介绍:(参数类型)参数名称 and(参数类型)参数名称 return; 方法调用:[self 方法名称] 下边放上作业的内容与步骤: 打飞机游戏实现步骤: 1.搭建界面

飞机游戏在C语言程序的基本语句能完成功能的体会

论飞机游戏在C语言程序的基本语句能完成功能的体会 一.题目:  射击类飞机游戏 二.目的:  通过c语言编写一个射击类的打飞机小游戏,可以通过键盘来进行游戏,操作方法是"a""d""w"或者"←""↑""→"来控制,击中敌机可获得积分,被敌机撞中死亡一次,每次游戏有3次生还机会,游戏结束后可选择是否重新开始游戏. 三.改进:  这个游戏是我对一个小游戏进行的改造升级版,添加了颜色函数.终

SevenZip.pas BUG修改版

本来用的是Henri Gourvest <[email protected]> 1.2版本 然后发现了2个问题: 1.对于文件名中带有空格的文件, 无法压缩, 原因是1488行, 压缩调用的是TStringList.Delimiter 来拆分文件字符串, 而空格是默认分行符, 导致文件名错误 2.解压缩函数, 如果目标文件已存在并且为只读属性时, 报错, 原因是1105行 创建文件流的时候直接使用了TFileStream.Create(path, fmCreate)导致 针对以上2个问题, 对

VB程序逆向反汇编常见的函数(修改版)

VB程序逆向常用的函数 1) 数据类型转换: a) __vbaI2Str    将一个字符串转为8 位(1个字节)的数值形式(范围在 0 至 255 之间) 或2 个字节的数值形式(范围在 -32,768 到 32,767 之间). b)__vbaI4Str   将一个字符串转为长整型(4个字节)的数值形式(范围从-2,147,483,6482,147,483,647) c)__vbar4Str  将一个字符串转为单精度单精度浮点型(4个字节)的数值形式 d)__vbar8Str   将一个字符