GL 游戏算法(附源码)

opengl小游戏 使用opengl写点小游戏。原理和实现在b站上传了视频,仅在这里放出源码 Game类声明 #pragma once #include<GL/glut.h> #include"SOIL.h" #include<string> #include<random> #include<ctime> #include<list> #pragma comment(lib, "SOIL.lib") GLuint CreateTexture(const c 阅读详情

http://software.intel.com/zh-cn/blogs/2012/03/20/gl/?cid=sw:prccsdn2193

GL 游戏算法(附源码)

作者: q345852047 (1 篇文章) 日期: 三月 20, 2012 在 1:27 下午

GL游戏规则:

有个列相当长的格子(格子总数不超过10的四次方),某些格子里面放了棋子(棋子总数足够多)

1.如果格子里面有棋子,就可以少拿走其中一颗,同时在这个格子的左边两个格子里面各放一颗;

2.如果连续两个格子里面都有棋子,可以分别从两个格子中都拿走一颗,并在她们右边的格子里面放入一颗

输入初始状态,反复使用规则1,2

输出终止状态(停机状态)

一. 每个格子至多只有一颗棋子

二. 相邻两个格子不能都有棋子

例如下图,格子里面的棋子数分别为为:2,3,5 ;终止状态为1, , ,1, , , , ,1
null
这是一道ACM的程序书上看到的一道题,当时书上面说的是用 斐波那契 数列来求解,此步骤简单,但是只能求得最后结果,不能得出每一步的步骤

笔者通过反复读取题意,根据题意想出一个算法,可以求得每一步的格局

具体算法如下:

第一个数为零

一。.第二个数>1

1。第三个数为零,则第二个数左移动 例如:0050 -> 1140

2。第三个数不为零

(1)第四个数为零,第二、三个数右移 例如:0520 ->0411

(2)第四个数不为零,第三、四个数右移动 例如:05220 ->05111 05221->05112

二。第二个数为1

. 1。第三个数为零,跳过本轮循环

. 2。第三个数不为零,

一直找到下一个不为1的数K

(1)数K为0,数k前两个数右移 例如:0111110 ->0111001

(2)数K大于1

1)数K下一个数为零,数K与其前一个数右移

例如:0111120 ->0111011 (2是K)

2)数K下一个数不为零

1*。数k下一个数的下一个数为零,数K与其下一个数右移

例如:0111121->01111101 (2是K)

2*。数K下一个数的下一个数不为零,

数K下一个数与其下一个数的下一个数右移

例如:011112130 ->011112021 (2是K)

对棋子数不断用以上方法,就可以得到最后要求的终止状态

相关代码:
01.#include"stdio.h"
02.#define M 40 //旗盘长度
03.#define N 20 //棋子放在旗盘的位置
04.int qi[M]; //存储每个格子里面的棋子
05.
06.void show() //显示当前状态下的棋子的格局
07.{
08. for (int i=0; i<M; i++)
09. if (qi[i] != 0)
10. printf("%d ",qi[i]);
11. else
12. printf("_ ");
13. printf("\n");
14.}
15.
16.void yi_dong()
17.{
18. int temp = 1,biaoji = 0; //标记是否已经移动到最终状态
19. while (temp)
20. {
21. temp = 0;
22. for (int i=2; i 1) //第二个数大于1
26. {
27. if (qi[i+1] == 0)//第三个数为零,第二个数左移
28. {
29. qi[i-2]++;
30. qi[i-1]++;
31. qi[i]--;
32. }
33. else // 第三个数不为零
34. {
35. if(qi[i+2] == 0) //第四个数为零,第二,三个数右移
36. {
37. qi[i]--;
38. qi[i+1]--;
39. qi[i+2]++;
40. i = i + 2;
41. }
42. else //第四个数不为零,第三,四个数右移
43. {
44. qi[i+1]--;
45. qi[i+2]--;
46. qi[i+3]++;
47. i = i + 3;
48. }
49. }
50. show();
51. }//if (qi[i] > 1)
52. else if (qi[i] == 1) //第二个数为1
53. {
54. if(qi[i+1] == 0) //第三个数为零,跳过本轮循环
55. continue;
56. while (qi[i+1] == 1) //找到下一个不为1的数
57. i++;
58. if(i>M-2)
59. {
60. biaoji = 1;
61. break;
62. }
63. if(qi[i+1] == 0) //当下一个数i+1为零,则数i-1和i右移
64. {
65. qi[i-1]--;
66. qi[i]--;
67. qi[i+1]++;
68. i++;
69. }
70. else //当下一个数i+1大于1
71. {
72. if (i > M-5)
73. {
74. biaoji = 1;
75. break;
76. }
77. if (qi[i+2] == 0)//当下一个数的下一个数i+2为零,i与i+1右移
78. {
79. if (i > M-3)
80. {
81. biaoji = 1;
82. break;
83. }
84. qi[i]--;
85. qi[i+1]--;
86. qi[i+2]++;
87. i = i + 2;
88. }
89. else // 当下一个数的下一个数i+2不为零
90. {
91. if(qi[i+3] == 0) //当下一个数的下一个数的下一个数i+3为零,i+1与I+2右移
92. {
93. qi[i+1]--;
94. qi[i+2]--;
95. qi[i+3]++;
96. i = i + 3;
97. }
98. else //当下一个数的下一个数的下一个数不为零,i+2与i+3右移
99. {
100. qi[i+2]--;
101. qi[i+3]--;
102. qi[i+4]++;
103. i = i + 4;
104. }
105. }
106. }
107. show();
108. }//else if (qi[i] == 1)
109. }//for (int i=2; i<M-3; i++)
110. for (i=1; i0 || (qi[M-2]!=0 && qi[M-1]!=0) || biaoji ==1) //如果越界
113. {
114. printf("\n此程序已经越界,请修改宏定义的 M 与 N 值后再运行该程序!\n");
115. break;
116. }
117. if(qi[i]>1 || ((qi[i]==1 && qi[i-1]!=0) || (qi[i] == 1 && qi[i+1]!=0))) //如果到达终止状态
118. {
119. temp = 1;
120. break;
121. }
122. }
123.
124. }//while (temp)
125.}
126.
127.int main()
128.{
129. int chang; //存储棋子的总长度
130. for(int i=0; i<M; i++) //先个旗盘上每个棋子初始化为零
131. qi[i] = 0;
132. printf("请输入棋子所占格子的总长度:");
133. scanf("%d",&chang);
134. printf("分别输入每个棋子用空格隔开:\n");
135. for (i=0; i<chang; i++)
136. scanf("%d", &qi[i+N]);
137. printf("格子的初始状态为:\n");
138. show();
139. yi_dong();
140. getchar();getchar();getchar();
141. return 0;
142.}
相关截图:
null

分类: 博客征文专栏, 游戏 

C++和OpenGL实现3D游戏编程【连载13】——多重纹理混合详解(附源码) OpenGL 的纹理组合器可以控制多重纹理的片段是如何组合的,比如自定义两个纹理的显示权重,给程序员更多自定义融合的选择。纹理组合器提供了一个新的纹理环境 GL_COMBINE允许我们控制每一个纹理单元的纹理片段是如何组合的,达到自定义生成多种不同的纹理组合方式的效果。第一步, 启用文理融合模式第二步,赋值纹理融合函数参数纹理组合器是通过 glTexEnv函数来确定具体的控制方式的。我们需要设置使用哪个纹理组合器的函数。 阅读详情

相关推荐

C++和OpenGL实现3D游戏编程【连载3】——3D空间模型光照初步(附源码)

上一节课,我们建立了简单的坐标系,同时也显示了一个正方体,但正方体的颜色为纯红色,好像一个平面物体一样,我们这节课就可以加一些光照,并创建更多的模型,使这些物体变得更加立体一些。这里由于没有系统自带的长方体,要自定义创建一个长方体地面。当然,我们现在加的只是一个感官上的地面,后期还要添加玩家在地面上的碰撞检查,我落在地面上,可以顺着地形的不同不断改变能力的高度,遇到障碍物我无法通过,如果遇到了峡谷,人物也可以自由落体势掉落到峡谷底部,但不会掉落无尽深渊的效果。

zhooyu的博客 3532

GL游戏算法(附源码)

GL游戏规则: 有个列相当长的格子(格子总数不超过10的四次方),某些格子里面放了棋子(棋子总数足够多) 1.如果格子里面有棋子,就可以少拿走其中一颗,同时在这个格子的左边两个格子里面各放一颗; 2.如果连续两个格子里面都有棋子,可以分别从两个格子中都拿走一颗,并在她们右边的格子里面放入一颗 输入初始状态,反复使用规则1,2 输出终止状态(停机状态)     一.  每个格子至多只有一

深海蓝的技术随笔 1331

glGameEngine:C#与OpenGL的开源3D游戏引擎

作为游戏引擎中的核心文件,其结构设计直接关系到游戏的整体架构和性能。核心类是引擎的基础,每个类负责处理特定的游戏开发领域或功能。Game类是游戏引擎的入口点,负责初始化和调用所有其他模块,它是游戏循环的驱动器,确保游戏状态的更新和渲染流程的正确执行。类专注于图形渲染,管理渲染管线,包括模型加载、纹理映射、光照计算及视图矩阵的变换等。类负责游戏音效的播放,管理音效的加载、播放、循环和音量控制。类处理所有玩家输入,比如键盘、鼠标或游戏手柄,确保输入可以被正确读取并响应。

weixin_42594427的博客 1271

Galgames Hgames下载中心,无毒

大型Hgames下载网站,男人懂的! http://www.galgame.net/bbs/?fromuid=330630 转载于:https://blog.51cto.com/3218478/586402

weixin_33816611的博客 1万+

深入解析Android太空保卫战游戏源码

本文还有配套的精品资源,点击获取 简介:在Android平台上,游戏开发是一个充满挑战与机遇的领域。本文将详细解析Android游戏“太空保卫战”的源码,揭示游戏内部机制,提升开发技能。关键知识点涵盖游戏架构、OpenGL ES图形处理、Android SDK运用、游戏逻辑实现、资源管理、用户交互以及性能优化等。 1. 游戏架构解析 在当今数字娱乐产业中,游...

weixin_36074800的博客 2083

Android大炮吃小兵游戏完整项目源码解析

本文还有配套的精品资源,点击获取 简介:该课程项目提供了《Android大炮吃小兵游戏》的源码,帮助开发者深入理解Android游戏开发的关键技术点。源码涵盖基础架构、图形渲染、事件处理、游戏逻辑、数据持久化、用户界面(UI)设计、音频处理、性能优化以及调试与测试等方面。通过学习和实践这些源码,开发者可以提升在Android游戏开发领域的技能。 1. Androi...

weixin_32480007的博客 1042

读 Beginning Android Games 2nd Edition (二十二) 封装OpenGL之GLGame类

GLGame类使用了大部分此书前面写过的AndroidGame类的代码,并增加了渲染和UI线程间的同步package com.badlogic.androidgames.framework.impl; import javax.microedition.khronos.egl.EGLConfig; import javax.microedition.khronos.opengles.GL10;

lee576的专栏 2277

深入解析Android小鸡游戏源码:提升游戏开发技能

htmltable {th, td {th {pre {简介:本文深入解析了一款被称赞的Android小鸡游戏的源码,以帮助开发者,特别是新手,理解游戏开发的基本流程和核心原理。包括游戏框架基础、图形与动画处理、触摸事件处理、游戏逻辑、资源管理、UI设计、状态管理、性能优化及扩展性与可维护性等方面。通过这种方式,开发者不仅可以掌握游戏开发流程,还能学到实际的Android应用开发技巧,为提升编程技能打下坚实基础。

weixin_34945060的博客 977

分数阶混沌系统GL算法的FPGA实现过程中的小问题

首先GL算法如下:    x(i)=(y(i-1)*z(i-1)-x(i-1))*h^q1+(c1*x(i-1)+c2*x(i-2)+....+c60*x(i-60))    y(i)=(x(i-1)*z(i-1)-y(i-1)*y(i-1))*h^q2+(c1*y(i-1)+c2*y(i-2)+....+c60*y(i-60))    z(i)=(x(i-1)*y(i-1-b*z(i-1)))*...

wuzhouqingcy的博客 990

GL_algorithm:这是Gregory-Loredo算法的一种实现,用于从到达时间列表中确定周期性信号的存在

GL_算法 这是Gregory-Loredo算法的一种实现,用于从到达时间列表中确定周期性信号的存在 该实现包含3个功能和2个脚本来测试算法 GL_algorithm.py 这将计算周期信号的存在的比值比,概率,最可能的频谱和bin数,有关详细信息,请参见: Gregory,PC和Thomas。 J. Loredo,1992年,《天体物理学杂志》中的“一种检测形状和周期未知的周期信号的新方法”,《天体物理学杂志》,第398页,第146页 compute_bin.py 这将为到达时间,频率,相位和箱数的给定列表计算箱状图 Simulation_arrival_times.py 模拟周期速率或恒定速率的到达时间 test_GL_algorithm.py 这将使用模拟数据测试功能GL_algorithm test_GL_real_data.py 它使用2个实际数据集(来源: :/

手把手教你如何修改YOLO11的模型结构(以CBAM和可变性卷积为例)

YOLO11修改模型结构

2401_86807530的博客 1万+

Legendary.gl游戏下载与安装:完整流程详解

想要免费畅玩Epic游戏商店的所有游戏吗?Legendary.gl就是你的终极解决方案!这款开源工具能够完全替代Epic Games Launcher,让你在Linux、macOS和Windows系统上自由下载、安装和管理Epic游戏。🎮 ## 什么是Legendary.gl? **Legendary**是一个革命性的开源游戏启动器,专门为Epic游戏商店设计。它提供了完整的游戏下载、安装、

gitblog_00848的博客 1018

STM32之W5500网络通信_w5500 profinet

*初始化8个socket*/setSHAR(ConfigMsg.mac);/*配置Mac地址*/setSUBR(ConfigMsg.sub);/*配置子网掩码*/setSIPR(ConfigMsg.lip);/*配置Ip地址*/setGAR(ConfigMsg.gw);/*配置默认网关*/setRTR(2000);/*设置溢出时间值*/setRCR(3);/*设置最大重新发送次数*/

2501_90250923的博客 1461

Legendary.gl EOS Overlay管理:多人游戏组件安装与更新终极指南

🎮 想要畅玩Epic Games的多人游戏?EOS Overlay是必不可少的组件!作为Legendary.gl的核心功能之一,EOS Overlay管理让你无需官方启动器就能享受完整的多人游戏体验。本文将为你详细介绍如何安装、更新和管理这个关键组件。 ## 什么是EOS Overlay?为什么它如此重要? EOS Overlay是Epic Online Services的核心组件,专门用于

gitblog_00938的博客 911

EDA环境下的LSF进阶调优:如何为Cadence/VCS等工具正确配置cgroups与daemon starter

本文深入探讨了在EDA环境中如何为Cadence/VCS等工具正确配置LSF的cgroups与daemon starter,解决资源分配与特殊应用兼容性问题。通过详细解析cgroups技术、daemon starter配置及混合资源管理策略,帮助提升LSF集群的效率和稳定性,特别适用于高性能计算和芯片设计场景。

weixin_33724046的博客 461

西门子博图编程:使用S7-1500冗余PLC 建立ModbusTCP通信

文章目录1.1 网络结构1.2 系统 IP 介绍1.3 Modbus TCP 通讯编程1.3.1 CPU 做服务器 1.1 网络结构 以 CPU151 7H 为例, 网络结构示意如下图所示: CPU 1517H 冗余 PLC 有 PROFINET X1 接口和 X2 接口, Modbus TCP 通讯可以将设备(例如 Standard PLC)通过交换机接入到任何网络接口中。如果接入 X1 接口,需要通过交换机接入到 MRP 环网中,但是并不需要支持 H-sync 转发。如果接入 X2 接口,只需要使

2万+

开源项目之飞行模拟游戏 GL-117

GL-117 一款飞行模拟游戏,环境上和效果上都是以真实的场景作参考!可以选择战斗机和武器。常见的任务地形是山谷和沙漠。 目标是破坏敌军设施如油库,基地,飞机等等。任务中会受到反飞机武器如对空导弹,对空战车的攻击,也少不了空战。 项目需要3D库:SDL.dll、SDL_mixer.dll,效果如图: 入口源码: /**********************

banketree 4387

基于STM32的多模态智能风扇控制系统设计与实现

本文详细介绍了基于STM32单片机的多模态智能风扇控制系统的设计与实现。系统集成了红外遥控、蓝牙手机控制及人体感应等多模态交互方式,通过PWM技术实现无级调速,并设计了安全优先的控制逻辑。文章从硬件选型、核心原理、软件编程到系统调试,提供了完整的实战指南,适合嵌入式开发爱好者学习与实践。

weixin_28285943的博客 238

Legendary.gl在Linux上的完美运行:Wine配置与游戏启动终极指南

Legendary.gl是一个免费开源的Epic Games启动器替代方案,专为Linux用户设计,让你能够在Linux系统上畅玩Epic游戏平台的各类游戏。🚀 这款强大的命令行工具不仅支持游戏下载、安装和更新,还能通过Wine环境完美运行Windows游戏。 ## 为什么选择Legendary.gl? 对于Linux游戏玩家来说,Legendary.gl提供了**完整的Epic游戏体验**

gitblog_01008的博客 512

【推荐算法】召回模型总结

【推荐算法】召回模型总结

m0_48086806的博客 6237

视源CVTE嵌入式面试题及参考答案(200+面试题,17万字)

内核模块如何设置? 内核模块是可在运行时动态加载到内核或从内核卸载的代码块。以下是设置内核模块的步骤: 首先,编写内核模块代码。通常使用 C 语言编写,包含必要的头文件,如<linux/init.h>、<linux/module.h>等。在代码中,需要定义模块的初始化函数和清理函数。初始化函数在模块加载时被调用,用于进行模块的初始化工作,如注册设备、分配资源等。清理函数在模块卸载时被调用,用于释放资源、注销设备等。 例如: #include <li

大模型大数据攻城狮的专栏 2202

告别《战神3》启动崩溃:RPCS3模拟器GL格式错误终极解决方案

你是否也曾遇到这样的情况:满怀期待地在RPCS3模拟器中启动《战神3》,却被突如其来的GL格式错误弹窗打断?画面撕裂、纹理错乱甚至直接崩溃,这些问题不仅破坏游戏体验,更让许多玩家对模拟器望而却步。本文将从错误根源出发,提供一套完整的解决方案,让你流畅体验奎托斯的复仇之旅。 ## 错误根源解析 GL格式错误本质上是PlayStation 3的图形API与PC端OpenGL标准之间的兼容性冲突。通...

gitblog_01183的博客 1306

metahuman 下载材质 脸部灰白 脸部过亮

metahuman 下载材质 脸部灰白 脸部过亮

jacke121的专栏 243

GL3W简明安装与使用指南

--- ## 项目介绍 GL3W 是一个简单但强大的OpenGL核心配置加载器,旨在简化现代OpenGL版本(特别是3.0及以上)在不同平台上的初始化过程。它通过一个简单的C接口,自动加载所有核心OpenGL函数以及提供查询特定OpenGL版本支持的功能。项目由[skaslev](https://github.com/skaslev)维护,可在[GitHub](https://github.c

gitblog_00423的博客 946

WINCC7.3破解文件

WINCC7.3硬件够破解文件,有需要的下载!WINCC7.3硬件够破解文件,有需要的下载!

计算机控制技术及应用

《计算机控制技术及应用》通过总结作者的科研成果和吸收国内外的先进理论、方法和技术,以计算机控制系统的网络化、开放化、智能化和集成化发展趋势为主线索,主要介绍计算机控制系统的基本概念和计算机控制系统的典型形式,计算机控制系统的数学描述与基本分析方法,以及数字PID控制器、最少拍控制系统、达林算法、状态变量设计法等设计方法及其各种改进算法。重点突出计算机控制系统输入输出通道接口的设计方法和典型控制系统的设计案例与实现方法等。

推荐项目:Open.GL —— 学习现代OpenGL的绝佳资源

推荐项目:Open.GL —— 学习现代OpenGL的绝佳资源 1、项目介绍 Open.GL 是一个专注于现代OpenGL教程的开源项目,旨在帮助开发者和爱好者深入理解这一强大的图形渲染库。该项目不仅提供了在线教程,还以电子书的形式提供学习材料,包括EPUB和PDF格式,方便用户在各种设备上阅读。 2、项目技术分析 Open.GL 的教程内容涵盖了从基础到高级的OpenGL编程概念,如顶点着色器、...

gitblog_00016的博客 710

最新的sdio 4.0 spec 协议标准 带书签 高清完整PDF版

Part-E1-SDIO-Specification-Ver4.00-Final-120220.pdf:最新的sdio 4.0 spec 协议标准 带书签 高清完整PDF版,包括SDIO 接口的外设,SDIO 接口官方协议等。

上一篇: 一个游戏程序员的学习资料
下一篇: android+unity游戏开发基础之场景的切换
sanlinux
博客等级 码龄17年 92粉丝 158原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

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

抵扣说明:

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

余额充值