C语言初学者——飞机大战(学函数前)

本文是为C语言初学者准备的一篇教程,作者分享了一个仅使用基本语法实现的飞机大战游戏。游戏中包含了地图构建、玩家移动、敌机生成与移动、子弹发射等核心功能。通过这个游戏,读者可以了解如何在C语言中进行简单的游戏编程实践。
摘要由CSDN通过智能技术生成

C语言初学者——飞机大战(学函数前)

这是我瞎写的一个飞机大战,就只用到了学习函数前的知识,刚学习c语言的人可以看看

编译预处理命令

这些都是比较常用的,初学者一般都需要掌握

#include<stdio.h>
#include<time.h>//srand
#include<stdlib.h>//rand
#include<windows.h>
#include<conio.h>

变量定义

1.地图构建:20*20
int i[20][20]= {0}; //0空1自2敌3弹
2.坐标表示,分数数量及判断敌机子弹是否存在的变量:
int x1=9,y1=19,x2,y2,x3,y3,di=0,fenshu=0,zidan=0;
3.循环用量(一般为i,j这里用a,b)
int a,b;//构图
4.重新开始
char cx;//重新开始
5.判断移动需要的变量
char yidong;

地图构建

20*20的地图,分为空白部分,玩家飞机,敌机,子弹,为他们分别设置位置,即坐标。x1y1为玩家坐标,x2y2为敌机坐标,x3y3为子弹坐标,具体代码如下:

		for(a=0; a<20; a++)
			for(b=0; b<20; b++)
				i[a][b]=0;//地图重置
		i[y1][x1]=1;//玩家坐标
		i[y2][x2]=2;//敌机坐标
		if(zidan==1)	i[y3][x3]=3;//子弹坐标
		for(a=0; a<20; a++) {
			for(b=0; b<20; b++) {
				if(i[a][b]==1)
					printf("*");//玩家
				else if(i[a][b]==2)
					printf("※");//敌机
				else if(zidan==1&&i[a][b]==3)
					printf("◎");//子弹
				else
					printf(" ");//空格
			}
			printf("\n");
		}

加上个死循环地图构建就完成了

玩家移动

这东西简单,话不多说,上代码

	if(kbhit()) {
			yidong=getch();
			if(yidong=='w'&&y1>0)
				y1--;
			else if(yidong=='s'&&y1<19)
				y1++;
			else if(yidong=='a'&&x1>0)
				x1--;
			else if(yidong=='d'&&x1<19)
				x1++;
			else if(yidong==' ') {
				x3=x1;
				y3=y1-1;
				zidan=1;//这部分不是移动,是发射子弹
			}
		}

tip:kbhit用来判断玩家是否按下键盘

敌机

敌机需要做到在第一排随机创建(rand函数),每次往下一格(y+1),在碰到子弹或到达底线后重新创建。

if(di==0) {
			x2=rand()%20;
			y2=0;
			di=1;
		}//第一排随机位置,di为敌机是否需要刷新的判断标准
		if((y3==y2||y2==y3-1)&&x3==x2) {
			fenshu++;
			zidan=0;
			x2=rand()%20;
			y2=0;
			di=1;
		}//死亡判定(其实直接di=0就行了,不小心写多了)
		if(y2==20)
			di=0;

移动只需y2++;即可

子弹

子弹写法和敌机写法类似,代码在移动,敌机被击中,创建地图中都已涉及到
只需添加:y3--;即可(用于子弹移动)

Sleep

等待时间后响应
tip: s要大写!单位:毫秒

system(“cls”);

清屏

游戏失败

玩家与敌机出在同一个位置(即x1==x2&&y1==y2)时游戏结束,并设置按下空格键重新开始

		if(y1==y2&&x1==x2)
		 break;
	cx=0; 
	printf("游戏失败!");
	printf("\n输入空格重新开始游戏");
	cx=getch();
	if(cx==32)
	 goto a; //回到总循环,虽然goto被骂的很惨,但毕竟教的比较早

完整程序

#include<stdio.h>
#include<time.h>
#include<stdlib.h>
#include<windows.h>
#include<conio.h>
main() {
	srand((unsigned)time(NULL));
	int i[20][20]= {0}; //0空1自2敌3弹
	int x1=9,y1=19,x2,y2,x3,y3,di=0,fenshu=0,zidan=0;
	int a,b;//构图
	char cx;//重新开始 
	char yidong;
	a:while(1) {
		if(di==0) {
			x2=rand()%20;
			y2=0;
			di=1;
		}
		for(a=0; a<20; a++)
			for(b=0; b<20; b++)
				i[a][b]=0;
		i[y1][x1]=1;
		i[y2][x2]=2;
		if(zidan==1)	i[y3][x3]=3;
		for(a=0; a<20; a++) {
			for(b=0; b<20; b++) {
				if(i[a][b]==1)
					printf("*");
				else if(i[a][b]==2)
					printf("※");
				else if(zidan==1&&i[a][b]==3)
					printf("◎");
				else
					printf(" ");
			}
			printf("\n");
		}
		if((y3==y2||y2==y3-1)&&x3==x2) {
			fenshu++;
			zidan=0;
			x2=rand()%20;
			y2=0;
			di=1;
		}
		printf("分数:%d",fenshu);
		Sleep(5);
		y2++;
		y3--;
		system("cls");
		if(y2==20)
			di=0;
		if(y3==0)
			zidan=0;
		if(kbhit()) {
			yidong=getch();
			if(yidong=='w'&&y1>0)
				y1--;
			else if(yidong=='s'&&y1<19)
				y1++;
			else if(yidong=='a'&&x1>0)
				x1--;
			else if(yidong=='d'&&x1<19)
				x1++;
			else if(yidong==' ') {
				x3=x1;
				y3=y1-1;
				zidan=1;
			}
		}Sleep(5);
		if(kbhit()) {
			yidong=getch();
			if(yidong=='w'&&y1>0)
				y1--;
			else if(yidong=='s'&&y1<19)
				y1++;
			else if(yidong=='a'&&x1>0)
				x1--;
			else if(yidong=='d'&&x1<19)
				x1++;
			else if(yidong==' ') {
				x3=x1;
				y3=y1-1;
				zidan=1;
			}
		}
		if(y1==y2&&x1==x2)
		 break;
	}
	cx=0; 
	printf("游戏失败!");
	printf("\n输入空格重新开始游戏");
	cx=getch();
	if(cx==32)
	 goto a; 
}

这样一个简易的飞机大战就做成了,感谢各位观看
希望各位能留下评论和点赞哈,谢谢

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

H W 何 为

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值