易商讯
当前位置: 首页 » 网络 » 游戏 » 正文

C语言实现:十步万度游戏!代码思路+源代码共享

放大字体  缩小字体 发布日期:2023-02-07 15:35:01
导读

C语言实现:十步万度游戏!代码思路+源代码共享你只能点十次, 但蝴蝶效应最终达到1万度。六种模式是可选的,每种模式都可以不断挑战极限,达到最高度。几十只精致的蝴蝶扇动翅膀,向你展示蝴蝶效应的美妙。一个小小的差异可能会导致很大的差异。这是-10步万度游戏,效果如图所示:玩法介绍:鼠标点击任何小圆圈,其指针顺时

C语言实现:十步万度游戏!代码思路+源代码共享简单的游戏编程(C语言实现:十步万度游戏!代码思路+源码分享)

你只能点十次, 但蝴蝶效应最终达到1万度。六种模式是可选的,每种模式都可以不断挑战极限,达到最高度。几十只精致的蝴蝶扇动翅膀,向你展示蝴蝶效应的美妙。一个小小的差异可能会导致很大的差异。

这是-10步万度游戏,效果如图所示:

玩法介绍:鼠标点击任何小圆圈,其指针顺时针旋转90度,随后的指向圆指针也依次旋转,所有圆圈的旋转度积累。玩家点击10次,试图获得尽可能高的旋转度。

首先,学习结构体的概念,利用结构体数组存储所有小圆信息;然后学习鼠标交互方法,实现鼠标点中小圆的旋转;然后学习数组作为函数的参数,实现旋转的迭代传播;最后统计和显示操作步数和旋转度数。

源码示例:

#include <graphics.h>  
#include <conio.h>
#include <math.h>
#define PI 3.14159 // PI宏定义

struct Round // 定义结构体,用来表示带角指示的小圆圈
{
	float x,y; // 小圆的圆心坐标
	float r; // 小圆半径
	int angleNum;  // 这里的对应角度只有0、1、2、3。表示乘以 PI/2 四个角度值后对应
};
// 全局变量定义
Round rounds[5][5]; // 结构体二维数组
int step; // 剩下的操作步数
int score; // 得分,也就是一共旋转多少度

void rotateRound(int i,int j) // 顺时针旋转二维数组中i行j列的小圆圈
{
	rounds[i][j].angleNum -= 1; // 值减1
	if (rounds[i][j].angleNum<0) // 如果小于0,再设为3
		rounds[i][j].angleNum = 3;  
	score += 90; // 得分加上90度
}

// 获得当前圆指向的下一个圆圈序列号
// 当前的圆序号存储在数组int中 indexes[2]下一个圆序号也存储在这个数组中
// 若有下一个方向的圆,返回1;如果指向边界,返回0
int GetNextIndexes(int indexes[2]) 
{
	int i = indexes[0]; // 现在的圆i,j序号
	int j = indexes[1]; // 

	// 根据当前圆的角度,获得下一个小圆圈的序号
	if (rounds[i][j].angleNum==0) // 指向右边的小圆圈
		j++; // right
	else if (rounds[i][j].angleNum==3) // 指向下面的小圆圈 
		i++; // down
	else if (rounds[i][j].angleNum==2) // 指向左边的小圆圈 
		j--; // left
	else if (rounds[i][j].angleNum==1) // 指向上面的小圆圈 
		i--; // up

	indexes[0] = i; // 下一个圆的序号在数组中更新
	indexes[1] = j; // 

	if (i>=0 && i<5 && j>=0  && j<5) // 假如序号没有越界
		return 1; // 说明指向一个圆圈,返回1
	else // 
		return 0; // 没有指向有效圆圈,返回0
}

void startup()  // 初始化函数
{
	initgraph(600,700); // 新建画面
	setbkcolor(RGB(50,50,50)); // 设置背景颜色
	setlinestyle(PS_SOLID,3); //  设置线条样式和线宽
	cleardevice(); // 清空背景
	BeginBatchDraw(); // 批量绘制开始
	step = 10; // 总共可以操作10步
	score = 0; // 初始为0度
	int i,j;
	// 初始化 设置5*5共25个小圆圈
	for (i=0;i<5;i++)
	{
		for (j=0;j<5;j++)
		{
			rounds[i][j].x = 100 + j*100; // 设置小圆圈的圆心坐标
			rounds[i][j].y = 200 + i*100; // 
			rounds[i][j].r = 30; // 设置小圆圈的半径
			rounds[i][j].angleNum = 1; // 一开始是PI/2角度,也就是说,都是向上的
		}
	}
}

void show() // 绘制函数
{
	int i,j;
	float angle; // 
	cleardevice();
	// 遍历所有的小圆圈
	for (i=0;i<5;i++)
	{
		for (j=0;j<5;j++)
		{
			setlinecolor(RGB(200,200,200));  // 将圆圈设置为白灰色
			circle(rounds[i][j].x,rounds[i][j].y,rounds[i][j].r); // 画小圆圈
			setlinecolor(RGB(255,0,0)); // 角度指示线设置为红色
			angle = rounds[i][j].angleNum * PI/2; // 相应的角度是通过数组记录的变量设置的
			// 用三角函数画出这条红线
			line(rounds[i][j].x, rounds[i][j].y,
				rounds[i][j].x + rounds[i][j].r * cos(-angle),
				rounds[i][j].y + rounds[i][j].r * sin(-angle));
		}
	}
	TCHAR s[20]; // 要输出的字符串
	setbkmode(TRANSPARENT); // 文字的透明显示
	_stprintf(s, _T("%d 步  %d 度"), step, score);	 // 将整数转换为字符串
	settextstyle(50, 0, _T(“宋体”); // 字体大小,风格
	outtextxy(150, 30, s); // 输出xy位置的字符串
	settextstyle(20, 0, _T(“宋体”); // 
	outtextxy(15,100,_T(”点击一个圆圈 其指针顺时针旋转90度 指针依次旋转”); 
	FlushBatchDraw();
	FlushBatchDraw(); // 批量绘制开始
}

void update()  // 更新函数
{
	MOUSEMSG m;		 // 定义鼠标消息
	if (MouseHit())   // 假如有鼠标消息
	{
		m = GetMouseMsg();  // 得到鼠标消息
		if (m.uMsg == WM_LBUTTonDOWN  && step>0) // 按鼠标左键,还有可操作的步数
		{
			step--; // 操作步数-1
			int clicked_i = int(m.y -150)/100; // 获得当前点击圆圈的序号
			int clicked_j = int(m.x -50)/100; // 
			rotateRound(clicked_i,clicked_j);	// 顺时针旋转当前圆圈90度
			show(); // 绘制
			Sleep(500); // 暂停几毫秒

			int indexes[2] = {clicked_i,clicked_j}; // 数组存储点击小圆圈的行列序列号
			while (GetNextIndexes(indexes)) // 获得指向的下一个圆圈。如果返回1,它将被重复执行
			{
				rotateRound(indexes[0],indexes[1]);	 // 将下一个指向的圆圈旋转90度
				show(); // 绘制
				Sleep(500); // 暂停几毫秒
			}
		}
	}
}

int main() // 主函数
{
	startup();  // 初始化
	while (1)   // 重复循环
	{
		show();  // 绘制
		update();  // 更新
	}
	return 0;
}

作者:童晶

希望对大家有所帮助!

简单的游戏编程(C语言实现:十步万度游戏!代码思路+源码分享)

此外,我还与您分享我收集的其他资源,从最零基础教程到C语言C++项目案例,在学习C语言的道路上,帮助大家克服困难!

分享编程学习书籍:

编程学习视频分享:

整理分享(多年学习的源代码、项目实战视频、项目笔记、基础入门教程)最重要的是,你可以在小组中交换编程问题!

对于C/C++如果你感兴趣,你可以在后台关注小编的私信:[编程交流]一起学习!可以得到一些C///C++项目学习视频资料哦!已设置关键字自动回复,自动接收!

简单的游戏编程(C语言实现:十步万度游戏!代码思路+源码分享)

声明:易商讯尊重创作版权。本文信息搜集、整理自互联网,若有来源标记错误或侵犯您的合法权益,请联系我们。我们将及时纠正并删除相关讯息,非常感谢!

 
(文/小编)
免责声明
• 
本文C语言实现:十步万度游戏!代码思路+源代码共享链接:http://www.esxun.cn/internet/88613.html 。本文仅代表作者个人观点,请读者仅做参考,如若文中涉及有违公德、触犯法律的内容,一经发现,立即删除,作者需自行承担相应责任。涉及到版权或其他问题,请及时联系我们,我们将在24小时内处理完毕。如涉及作品内容、版权等问题,请在作品发表之日起一周内与本网联系,否则视为放弃相关权利。
 

Copyright © www.esxun.cn 易商讯ALL Right Reserved


冀ICP备2023038169号-3