小飞机游戏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(void);//设置函数

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

int scr[22][N]={0},pl=9,width=24,speed=3,density=30,score=0,death=0;//全局变量:界面、我机初始位、界面宽度、敌机速度、敌机密度、得分、死亡

main(void)

{

menu();

int i=0,j=0;

scr[21][pl]=1;

scr[0][5]=3;

while(1)

{

if(kbhit())

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

{

case ‘a‘:case ‘A‘:

if(pl>0)

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

break;

case ‘d‘:case ‘D‘:

if(pl<width-2)

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

break;

case ‘w‘:case ‘W‘:

scr[20][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("\3");//输出我机的符号

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

printf("_");//子弹

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

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

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

}

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[20][pl]==3&&a[21][pl]==1)

death++;

}

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 控制我机左右飞行,W 发射子弹\n 设置:请按Esc\n 开始游戏:任意键\n                               by yan_xu");

if(getch()==27)

setting();

}

界面虽然有点简单,但是真正的游戏,C语言还能做这么有意思的东西,真是没有想到。

用到了很多的语句

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

飞机程序中,以include开头,其中运用了 if while,do while,printf,swatch,case break等基本语句

感觉程序最大的吸引人的地方,就是做的敌机的移动,和我的飞机的移动,以及子弹的移动,和打上飞机,飞机消失,感觉很神奇,分析代码后,恍然大悟,原来这么实现的,真是简单的语句也可以实现复杂的功能,

敌机移动:从数组一行第一个元素开始判断,如果是敌机数值,该数值向下移动一行,

原位置赋值空白。

子弹移动:从数组最后一行第一个元素判断,如果是子弹数值,该数值向上移动一行,

原位置赋值空白。

输出数组:从数组一行第一元素开始判断,判断里面的数组,输出相应的符号

整个过程就是不停清空屏幕,重新画屏幕的过程,

子弹往上飞,就是每次清空屏幕后加1,

这个看看函数

void movebul(int a[][N])

就很清楚了。


划拳小游戏程序

#include <stdio.h>
#include <stdlib.h>
#include <time.h>
int get_int(void);                  //规范输入的函数
int game(int y,int x);              //游戏函数
int result(int m,int n);            //比较最终结果的函数
int main()
{
   int x,y,m,n;
   int k = 0;
   char q;
   printf("1代表石头;2代表剪刀;3代表布;\n");
   printf("请输入您的选择.\n");
   while(k<3)
   {
    scanf("%d", &y);
       k++;
       game(y,x);
   }
   result(m,n);
   system("pause");
   return 0;
}
int game(int y,int x)
{
    int m = 0;              //玩家赢的次数
    int n = 0;              //电脑赢的次数
    srand(time(NULL));
    x = rand()%3+1;             //取随机数1~3
    if(y==1&&x==3)
    {
        printf("你出石头\n");
        printf("电脑出布\n");
        printf("你输了\n");
        ++n;            //电脑赢的次数
    }
    else if(y==1&&x==1)
    {
        printf("大家都出石头,平局\n");
        ++m;
        ++n;
    }
    else if(y==1&&x==2)
    {
        printf("你出石头\n");
        printf("电脑出剪刀\n");
        printf("你赢了\n");
        ++m;            //玩家赢的次数
    }
    if(y==2&&x==1)
    {
        printf("你出剪刀\n");
        printf("电脑出石头\n");
        printf("你输了\n");
        ++n;
    }
    else if(y==2&&x==2)
    {
        printf("大家都出剪刀,平局\n");
        ++m;
        ++n;
    }
    else if(y==2&&x==3)
    {
        printf("你出剪刀\n");
        printf("电脑出布\n");
        printf("你赢了\n");
        ++m;
    }
    if(y==3&&x==1)
    {
        printf("你出布\n");
        printf("电脑石头\n");
        printf("你赢了\n");
        ++m;
    }
    else if(y==3&&x==2)
    {
        printf("你出石头\n");
        printf("电脑出剪刀\n");
        printf("你输了\n");
        ++n;
    }
    else if(y==3&&x==3)
    {
        printf("大家都出布,平局\n");
        ++m;
        ++n;
    }
    return m,n;             //返回m,n的值
}
int result(int m,int n)         //比较最终结果
{
    if(m<n)
        printf("3局%d胜,你输了.\n",m);
    else if(m>n)
        printf("3局%d胜,你赢了.\n",m);
    else if(m==n)
        printf("一胜一负一平局,旗鼓相当。\n");
    return 0;
}


小飞机游戏C语言程序&划拳

时间: 2024-10-10 09:50:03

小飞机游戏C语言程序&划拳的相关文章

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

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

让姑姑不再划拳 码农也要有原则 : SOLID via C#

“姑娘,别这样.我们是有原则的.” “一个有原则的程序猿是不会写出 “摧毁地球” 这样的程序的,他们会写一个函数叫 “摧毁行星”而把地球当一个参数传进去.” “对,是时候和那些只会滚键盘的麻瓜不同了,我们可是有高逼格的程序猿.” [小九的学堂,致力于以平凡的语言描述不平凡的技术.如要转载,请注明来源:小九的学堂.cnblogs.com/xfuture] 写代码其实就是给一个世界创造秩序,世界越大就越需要原则,各司其职,统筹合作自然是比无脑的积木堆积星球来的令人信服,部分基于SOLID archi

PAT-乙级-1046. 划拳(15)

1046. 划拳(15) 时间限制 400 ms 内存限制 65536 kB 代码长度限制 8000 B 判题程序 Standard 作者 CHEN, Yue 划拳是古老中国酒文化的一个有趣的组成部分.酒桌上两人划拳的方法为:每人口中喊出一个数字,同时用手比划出一个数字.如果谁比划出的数字正好等于两人喊出的数字之和,谁就赢了,输家罚一杯酒.两人同赢或两人同输则继续下一轮,直到唯一的赢家出现. 下面给出甲.乙两人的划拳记录,请你统计他们最后分别喝了多少杯酒. 输入格式: 输入第一行先给出一个正整数

PAT 乙级 1046 划拳(15) C++版

1046. 划拳(15) 时间限制 400 ms 内存限制 65536 kB 代码长度限制 8000 B 判题程序 Standard 作者 CHEN, Yue 划拳是古老中国酒文化的一个有趣的组成部分.酒桌上两人划拳的方法为:每人口中喊出一个数字,同时用手比划出一个数字.如果谁比划出的数字正好等于两人喊出的数字之和,谁就赢了,输家罚一杯酒.两人同赢或两人同输则继续下一轮,直到唯一的赢家出现. 下面给出甲.乙两人的划拳记录,请你统计他们最后分别喝了多少杯酒. 输入格式: 输入第一行先给出一个正整数

Python重写C语言程序100例--Part11

''' [程序91] 题目:时间函数举例1 1.程序分析: 2.程序源代码: ''' if __name__ == '__main__': import time print time.ctime(time.time()) print time.asctime(time.localtime(time.time())) print time.asctime(time.gmtime(time.time())) ''' [程序92] 题目:时间函数举例2 1.程序分析: 2.程序源代码: ''' if

C语言程序编译的内存分配

C语言程序编译的内存分配: 1.栈区(stack) --编译器自动分配释放,主要存放函数的参数值,局部变量值等: 2.堆区(heap) --由程序员分配释放: 3.全局区或静态区 --存放全局变量和静态变量:程序结束时由系统释放,分为全局初始化区和全局未初始化区: 4.字符常量区 --常量字符串放与此,程序结束时由系统释放: 5.程序代码区--存放函数体的二进制代码 例: //main.c int a=0; //全局初始化区 char *p1; //全局未初始化区 void main() { i

100个经典C语言程序(益智类)

100个经典C语言程序(益智类) [1.绘制余弦曲线] 在屏幕上用"*"显示0~360度的余弦函数cos(x)曲线 [问题分析与算法设计] 利用cos(x)的左右对称性,将屏幕的行方向定义为x,列方向定义为y,则0~180度的图形与180~360度的图形是左右对称的,若定义图形的总宽度为62列,计算出x行0~180度时y点的坐标m,那么在同一行与之对称的180~360度的y点的坐标就 应为62-m.程序中利用反余弦函数acos计算坐标(x,y)的对应关系. #include<st

C语言程序的内存布局

一:C语言程序的存储区域 C语言编写的程序经过编绎-链接后,将形成一个统一的文件,它由几个部分组成,在程序运行时又会产生几个其他部分,各个部分代表了不同的存储区域: 1.代码段(Code or Text): 代码段由程序中的机器码组成.在C语言中,程序语句进行编译后,形成机器代码.在执行程序的过程中,CPU的程序计数器指向代码段的每一条代码,并由处理器依次运行. 2.只读数据段(RO data): 只读数据段是程序使用的一些不会被更改的数据,使用这些数方式类似查表式的操作,由于这些变量不需要更改

Linux环境下使用gcc编译,gdb反汇编C语言程序

使用虚拟机 VMware Workstation 10 Linux环境:Ubuntu 14.04 LTS Server amd64 我把过程截图如下. 首先是hello world程序: 备注: gcc -o 参数,指定生成程序文件名. gdb下,disas命令对应英文为disassembler,反汇编. 这里没有执行程序.如果想执行,会出现: [email protected]:~$./helloworld Hello World! [email protected]:~$ 当然,前面要加 .