软工第4次课设-黄金点游戏多轮游戏结果可视化及AI算法

博客介绍了对黄金点游戏的改进,包括新增多轮游戏积分、历史记录查询和AI智能预测功能。游戏现在更注重策略而非单一运气,AI会根据历史数据预测获胜数字,增加游戏趣味性和挑战性。同时,代码展示了游戏逻辑和AI算法的实现细节。
摘要由CSDN通过智能技术生成

对原有项目的改进

首先,本次版本在原有基础上增加了多轮游戏累计积分功能,这样可以让参与者们经过多轮游戏的角逐在深思熟虑的情况下决定胜负,而非仅仅可能单靠运气的一轮。
同时,我们为游戏增加了历史游戏结果查询的功能,参与者可以查询历史记录,观看每一轮的游戏计算结果、游戏获胜数字、游戏失败数字,并以此作为依据来判断此后每轮的走势。
而后,我们增加了一个AI参与游戏,AI会自动根据前面几轮的游戏结果来对本轮游戏获胜数字进行预测。
最后,在功能实现上,修改了部分游戏规则,我们在分数设置上进行了更加灵活的改进,将AI作为最后一名玩家加入游戏,并对相应算法进行了优化。

效果展示

多轮游戏累计分数:
在这里插入图片描述
历史得分记录显示
在这里插入图片描述
AI进行游戏效果展示
如图,AI在经过前两轮后陷入劣势,分数为-4,而后立马根据前两轮结果进行分析,给出了新的预测数据。
在这里插入图片描述
在经过预测后,AI获得的第三轮的胜利
在这里插入图片描述

实现代码

每轮游戏结果计算及累加:在原有算法的基础上,增加了计数器timer记录游戏轮数,并且用三个数组分别记录游戏结果、获胜数字及失败数字,并将之前较芜杂的代码进行了精简。

void CnewgoldDlg::OnBnClickedButtonbegin()
{
	// TODO: 在此添加控件通知处理程序代码
	int iCount = m_list.GetItemCount();
	for (int i = 0; i < iCount; i++)
	{
		CString begin;
		begin.Format(_T("%d"), 0);
		m_list.SetItemText(i, 3, begin);
	}
	double sum = 0;
	for (int i = 0; i < iCount; i++)
	{
		sum += _ttof(m_list.GetItemText(i, 1));//将CString类型转换为double类型
		sum += _ttof(m_list.GetItemText(i, 2));
	}
	CString avg;
	avg.Format(_T("%f"), sum / iCount * 0.618);//将double类型转换为CString,用Format()
	double davg;
	davg = _ttof(avg);
	double max = fabs(_ttof(m_list.GetItemText(0, 1)) - davg), min = fabs(_ttof(m_list.GetItemText(0, 1)) - davg);
	int flagmax = 0, flagmin = 0;
	int flagmaxcol = 0, flagmincol = 0;
	int ismax = 0, ismin = 0;
	number[timer] = davg;
	winer[timer] = _ttof(m_list.GetItemText(0, 1));
	loser[timer] = _ttof(m_list.GetItemText(0, 1));//初始化,设置为第一个人的数
	for (int i = 0; i < iCount; i++)
	{
		if (max < fabs(_ttof(m_list.GetItemText(i, 1)) - davg))
		{
			max = fabs(_ttof(m_list.GetItemText(i, 1)) - davg);
			loser[timer] = _ttof(m_list.GetItemText(i, 1));//记录失败者
			flagmax = i;
			flagmaxcol = 1;
		}
		if (min > fabs(_ttof(m_list.GetItemText(i, 1)) - davg))
		{
			min = fabs(_ttof(m_list.GetItemText(i, 1)) - davg);
			winer[timer] = _ttof(m_list.GetItemText(i, 1));//记录胜利者
			flagmin = i;
			flagmincol = 1;
		}
	}

	for (int i = 0; i < iCount; i++)
	{
		if (max < fabs(_ttof(m_list.GetItemText(i, 2)) - davg))
		{
			max = fabs(_ttof(m_list.GetItemText(i, 2)) - davg);
			loser[timer] = _ttof(m_list.GetItemText(i, 2));//记录失败者
			flagmax = i;
			flagmaxcol = 2;
		}
		if (min > fabs(_ttof(m_list.GetItemText(i, 2)) - davg))
		{
			min = fabs(_ttof(m_list.GetItemText(i, 2)) - davg);
			winer[timer] = _ttof(m_list.GetItemText(i, 2));//记录胜利者
			flagmin = i;
			flagmincol = 2;
		}
	}
	CString score;
	for (int i = 0; i < iCount; i++)//分数计算
	{
		if (fabs(_ttof(m_list.GetItemText(i, 1)) - davg) == fabs(_ttof(m_list.GetItemText(flagmax, flagmaxcol)) - davg)||
			fabs(_ttof(m_list.GetItemText(i, 2)) - davg) == fabs(_ttof(m_list.GetItemText(flagmax, flagmaxcol)) - davg))
		{
			sco[i] -= 2;
		}
		if (fabs(_ttof(m_list.GetItemText(i, 1)) - davg) == fabs(_ttof(m_list.GetItemText(flagmin, flagmincol)) - davg)||
			fabs(_ttof(m_list.GetItemText(i, 2)) - davg) == fabs(_ttof(m_list.GetItemText(flagmin, flagmincol)) - davg))
		{
			sco[i] += iCount;
		}
	} 
	for (int i = 0; i < iCount; i++) {
		score.Format(_T("%d"), sco[i]);
		m_list.SetItemText(i, 3, score);
	}
	timer++;
}

历史记录显示:弹出新的窗口,并将每轮结果以统计表的形式进行显示。

BOOL sta::OnInitDialog()
{
	CDialogEx::OnInitDialog();
	sta_list.InsertColumn(0, _T("游戏轮数"), 0, 150);
	sta_list.InsertColumn(1, _T("本轮结果"), 0, 150);
	sta_list.InsertColumn(2, _T("获胜数字"), 0, 150);
	sta_list.InsertColumn(3, _T("失败数字"), 0, 150);
	// TODO:  在此添加额外的初始化
	CString score;
	for (int i = 0;i < timer;i++) {
		score.Format(_T("     %d"), i+1);
		sta_list.InsertItem(i, score);
		score.Format(_T("  %f"), number[i]);
		sta_list.SetItemText(i, 1, score);
		score.Format(_T("  %f"), winer[i]);
		sta_list.SetItemText(i, 2, score);
		score.Format(_T("  %f"), loser[i]);
		sta_list.SetItemText(i, 3, score);
	}

	return TRUE;  // return TRUE unless you set the focus to a control
				  // 异常: OCX 属性页应返回 FALSE
}

AI算法编写:设置预测项和干扰项,以前一轮结果来设置干扰项来扰动结果,根据前两轮结果及自己输入的干扰项来设置预测项从而保证胜利。

void CnewgoldDlg::OnBnClickedButtonAi()//AI参加按钮
{
	// TODO: 在此添加控件通知处理程序代码
	double forecast, disturb;
	CString AI("AI");
	CString gold;
	if (timer == 0) 
	{
		int cout = m_list.GetItemCount();
		m_list.InsertItem(cout, AI);
		forecast = 30.9;//如果所有人写随机数字,那么数字的平均值就是50,50乘0.618为30.9
		disturb = 30.9;
		gold.Format(_T("%f"), forecast);
		m_list.SetItemText(cout, 1, gold);
		gold.Format(_T("%f"), disturb);
		m_list.SetItemText(cout, 2, gold);
	}
	else if (timer == 1)
	{
		int cout = m_list.GetItemCount();
		forecast = 30.9;
		disturb = 30.9;
		gold.Format(_T("%f"), forecast);
		m_list.SetItemText(cout-1, 1, gold);
		gold.Format(_T("%f"), disturb);
		m_list.SetItemText(cout-1, 2, gold);
	}
	else
	{
		int cout = m_list.GetItemCount();
		disturb = number[timer-1]*0.618;//设置干扰数为上一轮黄金点的0.618
		double nextpoint = (number[timer - 1] * number[timer - 1]) / number[timer - 2];//根据上两轮确定这轮黄金点的趋势
		forecast = nextpoint + (disturb-nextpoint) / 8 * 0.618;//加入干扰项考虑
		gold.Format(_T("%f"), forecast);
		m_list.SetItemText(cout-1, 1, gold);
		gold.Format(_T("%f"), disturb);
		m_list.SetItemText(cout-1, 2, gold);
	}
}

小结

经过几次改进后,我们的黄金点游戏预期功能已经基本实现,从原本简单的单轮单数字黄金点游戏一步步改进成了如今的累计轮数双数字的黄金点游戏,并且加入了AI来为玩家们增加游戏难度及游戏乐趣。

Python网络爬虫与推荐算法新闻推荐平台:网络爬虫:通过Python实现新浪新闻的爬取,可爬取新闻页面上的标题、文本、图片、视频链接(保留排版) 推荐算法:权重衰减+标签推荐+区域推荐+热推荐.zip项目工程资源经过严格测试可直接运行成功且功能正常的情况才上传,可轻松复刻,拿到资料包后可轻松复现出一样的项目,本人系统开发经验充足(全领域),有任何使用问题欢迎随时与我联系,我会及时为您解惑,提供帮助。 【资源内容】:包含完整源码+工程文件+说明(如有)等。答辩评审平均分达到96分,放心下载使用!可轻松复现,设计报告也可借鉴此项目,该资源内项目代码都经过测试运行成功,功能ok的情况下才上传的。 【提供帮助】:有任何使用问题欢迎随时与我联系,我会及时解答解惑,提供帮助 【附带帮助】:若还需要相关开发工具、学习资料等,我会提供帮助,提供资料,鼓励学习进步 【项目价值】:可用在相关项目设计中,皆可应用在项目、毕业设计、课程设计、期末/期中/大作业、工程实训、大创等学科竞赛比赛、初期项目立项、学习/练手等方面,可借鉴此优质项目实现复刻,设计报告也可借鉴此项目,也可基于此项目来扩展开发出更多功能 下载后请首先打开README文件(如有),项目工程可直接复现复刻,如果基础还行,也可在此程序基础上进行修改,以实现其它功能。供开源学习/技术交流/学习参考,勿用于商业用途。质量优质,放心下载使用。
项目描述:建立购物小商城平台. 实现了前台页面系统。 技术描述:通过Spring 主框架来管理Struts2和Hibernate 框架搭建的电商小平台,用MySQL数据库并创建了表有用户表,订单表,商品表,商品分类表,商品内容表,购物车表等来存储数据。用到hibernate….zip项目工程资源经过严格测试可直接运行成功且功能正常的情况才上传,可轻松复刻,拿到资料包后可轻松复现出一样的项目,本人系统开发经验充足(全领域),有任何使用问题欢迎随时与我联系,我会及时为您解惑,提供帮助。 【资源内容】:包含完整源码+工程文件+说明(如有)等。答辩评审平均分达到96分,放心下载使用!可轻松复现,设计报告也可借鉴此项目,该资源内项目代码都经过测试运行成功,功能ok的情况下才上传的。 【提供帮助】:有任何使用问题欢迎随时与我联系,我会及时解答解惑,提供帮助 【附带帮助】:若还需要相关开发工具、学习资料等,我会提供帮助,提供资料,鼓励学习进步 【项目价值】:可用在相关项目设计中,皆可应用在项目、毕业设计、课程设计、期末/期中/大作业、工程实训、大创等学科竞赛比赛、初期项目立项、学习/练手等方面,可借鉴此优质项目实现复刻,设计报告也可借鉴此项目,也可基于此项目来扩展开发出更多功能 下载后请首先打开README文件(如有),项目工程可直接复现复刻,如果基础还行,也可在此程序基础上进行修改,以实现其它功能。供开源学习/技术交流/学习参考,勿用于商业用途。质量优质,放心下载使用。
1、资源项目源码均已通过严格测试验证,保证能够正常运行; 2、项目问题、技术讨论,可以给博主私信或留言,博主看到后会第一时间与您进行沟通; 3、本项目比较适合计算机领域相关的毕业设计课题、课程作业等使用,尤其对于人工智能、计算机科学与技术等相关专业,更为适合; 、4下载使用后,可先查看README.md或论文文件(如有),本项目仅用作交流学习参考,请切勿用于商业用途。 5、资源来自互联网采集,如有侵权,私聊博主删除。 6、可私信博主看论文后选择购买源代码。 1、资源项目源码均已通过严格测试验证,保证能够正常运行; 2、项目问题、技术讨论,可以给博主私信或留言,博主看到后会第一时间与您进行沟通; 3、本项目比较适合计算机领域相关的毕业设计课题、课程作业等使用,尤其对于人工智能、计算机科学与技术等相关专业,更为适合; 4、下载使用后,可先查看README.md或论文文件(如有),本项目仅用作交流学习参考,请切勿用于商业用途。 5、资源来自互联网采集,如有侵权,私聊博主删除。 6、可私信博主看论文后选择购买源代码。 1、资源项目源码均已通过严格测试验证,保证能够正常运行; 2、项目问题、技术讨论,可以给博主私信或留言,博主看到后会第一时间与您进行沟通; 3、本项目比较适合计算机领域相关的毕业设计课题、课程作业等使用,尤其对于人工智能、计算机科学与技术等相关专业,更为适合; 4、下载使用后,可先查看rEADME.md或论文文件(如有),本项目仅用作交流学习参考,请切勿用于商业用途。 5、资源来自互联网采集,如有侵权,私聊博主删除。 6、可私信博主看论文后选择购买源代码。
1、资源项目源码均已通过严格测试验证,保证能够正常运行; 2、项目问题、技术讨论,可以给博主私信或留言,博主看到后会第一时间与您进行沟通; 3、本项目比较适合计算机领域相关的毕业设计课题、课程作业等使用,尤其对于人工智能、计算机科学与技术等相关专业,更为适合; 4、下载使用后,可先查看README.md或论文文件(如有),本项目仅用作交流学习参考,请切勿用于商业用途。 5、资源来自互联网采集,如有侵权,私聊博主删除。 6、可私信博主看论文后选择购买源代码。 1、资源项目源码均已通过严格测试验证,保证能够正常运行; 2、项目问题、技术讨论,可以给博主私信或留言,博主看到后会第一时间与您进行沟通; 3、本项目比较适合计算机领域相关的毕业设计课题、课程作业等使用,尤其对于人工智能、计算机科学与技术等相关专业,更为适合; 4、下载使用后,可先查看README.md或论文文件(如有),本项目仅用作交流学习参考,请切勿用于商业用途。 5、资源来自互联网采集,如有侵权,私聊博主删除。 6、可私信博主看论文后选择购买源代码。 1、资源项目源码均已通过严格测试验证,保证能够正常运行; 2、项目问题、技术讨论,可以给博主私信或留言,博主看到后会第一时间与您进行沟通; 3、本项目比较适合计算机领域相关的毕业设计课题、课程作业等使用,尤其对于人工智能、计算机科学与技术等相关专业,更为适合; 4、下载使用后,可先查看README.md或论文文件(如有),本项目仅用作交流学习参考,请切勿用于商业用途。 5、资源来自互联网采集,如有侵权,私聊博主删除。 6、可私信博主看论文后选择购买源代码。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值