IT数码 购物 网址 头条 软件 日历 阅读 图书馆
TxT小说阅读器
↓语音阅读,小说下载,古典文学↓
图片批量下载器
↓批量下载图片,美女图库↓
图片自动播放器
↓图片自动播放器↓
一键清除垃圾
↓轻轻一点,清除系统垃圾↓
开发: C++知识库 Java知识库 JavaScript Python PHP知识库 人工智能 区块链 大数据 移动开发 嵌入式 开发工具 数据结构与算法 开发测试 游戏开发 网络协议 系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程
数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁
 
   -> 游戏开发 -> ?还记得10年前的微信小游戏【打飞机】吗?C语言实现! -> 正文阅读

[游戏开发]?还记得10年前的微信小游戏【打飞机】吗?C语言实现!

0.目录?

1. 摘要
2. 思路分析
3. 代码实现
? ? ? ?3.1 头文件
? ? ? ?3.2 测试文件
? ? ? ?3.3 模块文件
4. 总结

注:代码已上传github,欢迎大家克隆哦

1. 摘要?

大家是否还记得10年前微信小游戏打飞机引起的朋友圈混战?

大家是否还记得智能手机刚刚普及时熬夜刷分的干劲?

今天,我们就用C语言重温一波当年的峥嵘岁月。

在这里插入图片描述

2. 思路分析?

本游戏包含菜单、游戏主体两个部分

游戏主体又包括了飞机/激光的绘制以及靶子的生成/命中/得分两个模块

是较为简洁的

w ------ 上
s ------ 下
a ------ 左
d ------ 右
空格 ------ 发射激光

3. 代码实现??

3.1 头文件

#pragma once

#include <stdio.h>
#include <stdlib.h>
#include <Windows.h>
#include <conio.h>
#include <time.h>


#define TARGET_RANGE 47 //靶子横向出现的范围的极限


void ShowTarget(int isKilled, int target_x);
void ShowAircraft(int isFired, int* isKilled, int target_x, int* score, int x, int y);

3.2 测试文件

#define _CRT_SECURE_NO_WARNINGS 1
#include "aircraftwar.h"

// Shoot rays
//绘制激光
void isFired(int x, int y)
{
	int i = 0;
	int j = 0;
	for (j = 0; j < y - 1; j++)
	{
		for (i = 0; i < x; i++)
		{
			printf(" ");
		}
		printf("  |");

		printf("\n");
	}
}

void Game()
{
	srand((unsigned)time(NULL));
	//Board();
	int i = 0;
	int j = 0;
	int x = 0;//飞机横坐标
	int y = 10;//飞机纵坐标
	int score = 0;//得分
	int isKilled = 0;//判断靶子是否被击中,0为未击中
	int SetTarget = 0;//判断是否需要重新生成靶子
	int target_x = 5;//靶子初始横坐标
	while (1)
	{
		int isFired = 0;
		//Judge if a new target needs refleshing
		//在靶子被击中后,且再次进行了一次移动之后,靶子刷新,因为%的是2,可以修改
		if (SetTarget % 2 == 0 && isKilled == 1)
		{
			target_x = rand() % TARGET_RANGE + 3;
			isKilled = 0;
			SetTarget++;
		}
		else if (isKilled == 1)
		{
			SetTarget++;
		}

		char input = _getch();//_getch函数直接从键盘获取字符,无需回车
		system("cls");//每次在键入前清屏
		printf("==================================================\n");
		//Choose your next step
		switch (input)
		{
		case 'w':
			y--;
			break;
		case 's':
			y++;
			break;
		case 'a':
			x--;
			break;
		case 'd':
			x++;
			break;
		case ' ':
			isFired = 1;
			break;
		default:
			break;
		}
		//Show a target when isKilled == 0
		ShowTarget(isKilled,target_x);
		// Print the aircraft while not fired or fired
		ShowAircraft(isFired, &isKilled, target_x, &score, x, y);
		//Print current score
		printf("==================================================\n");
		printf("                                          Score:%d\n", score);
		if (score == 10)
		{
			printf("W i n!!!!!!!\n");
			printf("Wait 5 seconds......\n");
			Sleep(5000);
			system("cls");
			break;
		}
	}
}

//打印规则
void Rule()
{
	printf("+ ------ target\n");
	printf("Destroy 10 target and win the game\n");
	printf("w ------ up\ns ------ down\na ------ left\nd ------ right\nspace ------ shoot\n");
}

//打印菜单
void menu()
{
	printf("========        Aircraft      War             ========\n");
	printf("======================================================\n");
	printf("========               1.play                 ========\n");
	printf("========               2.rule                 ========\n");
	printf("========               0.exit                 ========\n");
	printf("======================================================\n");
}
int main()
{
	int choose = 0;
	do {
		menu();
		scanf("%d", &choose);
		switch (choose)
		{
		case 1:
			Game();
			break;
		case 2:
			Rule();
			break;
		case 0:
			printf("Exit!\n");
			break;
		default:
			printf("Illegal input!\n");
			break;
		}
	} while (choose);
	return 0;
}

3.3 模块文件

#define _CRT_SECURE_NO_WARNINGS 1
#include "aircraftwar.h"


//打印靶子
void ShowTarget(int isKilled,int target_x)
{
	int i = 0;
	if (isKilled == 0)
	{
		for (i = 0; i < target_x; i++)
		{
			printf(" ");
		}
		printf("+");
		printf("\n");
	}
}

//飞机的操作
void ShowAircraft(int isFired, int* isKilled, int target_x, int* score, int x,int y)
{
	int i = 0;
	int j = 0;
	//打印不发射激光时的飞机
	if (isFired == 0)
	{
		for (j = 0; j < y; j++)
		{
			printf("\n");
		}


		for (i = 0; i < x; i++)
		{
			printf(" ");
		}
		printf("  *\n");
		for (i = 0; i < x; i++)
		{
			printf(" ");
		}
		printf("*****\n");
		for (i = 0; i < x; i++)
		{
			printf(" ");
		}
		printf(" * *");
		printf("\n");
	}
	
	//打印发射激光时的飞机 
	else
	{
		for (j = 0; j < y; j++)
		{
			for (i = 0; i < x; i++)
			{
				printf(" ");
			}
			printf("  |");
			printf("\n");
		}


		for (i = 0; i < x; i++)
		{
			printf(" ");
		}
		printf("  *\n");
		for (i = 0; i < x; i++)
		{
			printf(" ");
		}
		printf("*****\n");
		for (i = 0; i < x; i++)
		{
			printf(" ");
		}
		printf(" * *");
		printf("\n");
		
		//Judge if the target is targeted.
		//判断激光是否击中了靶子,并加分
		if (x + 2 == target_x && *isKilled == 0)
		{
			*isKilled = 1;
			(*score)++;
		}
	}
}

4. 总结?

总结一下,我觉得小游戏最精髓的部分在于,用一次又一次的画面的重新打印来实现的玩家前后左右移动/射击时的动态效果

祝大家玩的开心!

  游戏开发 最新文章
6、英飞凌-AURIX-TC3XX: PWM实验之使用 GT
泛型自动装箱
CubeMax添加Rtthread操作系统 组件STM32F10
python多线程编程:如何优雅地关闭线程
数据类型隐式转换导致的阻塞
WebAPi实现多文件上传,并附带参数
from origin ‘null‘ has been blocked by
UE4 蓝图调用C++函数(附带项目工程)
Unity学习笔记(一)结构体的简单理解与应用
【Memory As a Programming Concept in C a
上一篇文章           查看所有文章
加:2021-09-02 11:43:50  更:2021-09-02 11:45:02 
 
开发: C++知识库 Java知识库 JavaScript Python PHP知识库 人工智能 区块链 大数据 移动开发 嵌入式 开发工具 数据结构与算法 开发测试 游戏开发 网络协议 系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程
数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁

360图书馆 购物 三丰科技 阅读网 日历 万年历 2024年12日历 -2024/12/22 0:00:52-

图片自动播放器
↓图片自动播放器↓
TxT小说阅读器
↓语音阅读,小说下载,古典文学↓
一键清除垃圾
↓轻轻一点,清除系统垃圾↓
图片批量下载器
↓批量下载图片,美女图库↓
  网站联系: qq:121756557 email:121756557@qq.com  IT数码