码迷,mamicode.com
首页 > 其他好文 > 详细

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

时间:2016-05-29 16:54:33      阅读:242      评论:0      收藏:0      [点我收藏+]

标签:include   游戏   


#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 

本文出自 “11639407” 博客,谢绝转载!

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

标签:include   游戏   

原文地址:http://11649407.blog.51cto.com/11639407/1784189

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!