怀柔网站制作网站大图片优化

张小明 2026/1/10 4:50:26
怀柔网站制作,网站大图片优化,安徽科技网站建设,许昌建设网站2048[C语言版]1.编译环境*Win10专业版x64 VS2015*2.项目运行效果3.思路简介#xff1a;1.游戏规则游戏的规则很简单#xff0c;你需要控制所有方块向同一个方向运动#xff0c;两个相同数字的方块撞在一起之后合并成为他们的和#xff0c;每次操作之后会在空白的方格处随机…2048[C语言版]1.编译环境*Win10专业版x64 VS2015*2.项目运行效果3.思路简介1.游戏规则游戏的规则很简单你需要控制所有方块向同一个方向运动两个相同数字的方块撞在一起之后合并成为他们的和每次操作之后会在空白的方格处随机生成一个2或者4生成2的概率要大一些最终得到一个“2048”的方块就算胜利了。2.核心算法1、方块移动和合并算法。主要思想把游戏数字面板抽象成4行4列的二维数组a[4][4]值为0的位置表示空方块其他表示对应数字方块。把每一行同等对待只研究一行的移动和合并算法然后可以通过遍历行来实现所有行的移动合并算法。在一行中用b[4]表示一行的一位数组使用两个下标变量来遍历列项这里使用j和k其中j总在k的后面用来寻找k项后面第一个不为0的数字而k项用于表示当前待比较的项总是和j项之间隔着若干个数字0或者干脆紧挨着。不失一般性考虑往左滑动时初始事情况下j等于1而k等于0接着判断j项数字是否大于0若是则判断j项和k项数字的关系分成3种情况处理分别是P1: P2: b[k]0和P3: b[k]!0且b[k]!b[j]若否则j自加1然后继续寻找k项后面第一个不为0的数字。其中P1P2和P3分别对应如下P1b[k]b[j]则b[k] 2 * b[k]说明两数合并了且b[j] 0合并之后要将残留的j项值清零接着k自加1然后进行下一次循环。P2b[k]0则表示b[j]之前全是空格子此时直接移动b[j]到k的位置也就是b[k] b[j]然后b[j] 0移动后将残留的j项值清零接着k值不变然后进行下一次循环。P3b[k]!0且b[k]!b[j]则表示两数不相等且都不为0此时将两数靠在一起也就是b[k1] b[j]。接着分两种小情况若j!k1则b[j] 0移动后将残留的j项值清零若否则表示两数原先就靠在一起则不进行特殊处理相当于未移动。接着k自加1然后进行下一次循环。举一个P1的例子流程表示如下一行内移动合并算法描述如下此例为左移情况其他方向与之类似区别仅仅是遍历二维数组的行项和列项的方式。4.主要源码#include stdafx.h #include time.h #include conio.h #define FRAMERWHIDTH 20 //一个小的格子的宽度 #define FRAMERHIGHT 20 //一个小的格子的高度 int Bound[4][4]; //抽象为地图 int RandNum_nFalge; //是否添加一个新的随机数标志 1---产生新的随机数 0---不必产生新的随机数 int Gameover_nFlage; //是否游戏结束 1---游戏失败结束 2----游戏胜利结束 0---继续正常游戏未结束 int Score; //游戏分数 //数组的移动 下标 kj 其中j为k后面的第一个不为0的数字 //左移动 void MoveLeft() { for (int i 0; i 4; i) //一共有4行 { for (int k 0, j 1; j 4; j) //每一行都是有4列个数字 { if (Bound[i][j] 0) //在一行中只判k只有遇到的第一个非0的个数字 j0 { if(Bound[i][k] Bound[i][j]) //情况一:k j j 0 { Score Bound[i][k] * 2; Bound[i][j] 0; RandNum_nFalge 1; } else if (Bound[i][k] 0) //情况二:k 0 j0 { Bound[i][k] Bound[i][j]; Bound[i][j] 0; RandNum_nFalge 1; } else //情况三:k ! j j 0 { Bound[i][k] Bound[i][j]; if (k ! j) { Bound[i][j] 0; RandNum_nFalge 1; } } } } } } //右移动 void MoveRight() { for (int i 0; i 4; i) //一共有4行 { for (int k 3, j 2; j 0; j--) //每一行都是有4列个数字 { if (Bound[i][j] 0) //在一行中只判k只有遇到的第一个非0的个数字 j0 { if (Bound[i][k] Bound[i][j]) //情况一:k j j 0 { Score Bound[i][k--] * 2; Bound[i][j] 0; RandNum_nFalge 1; } else if (Bound[i][k] 0) //情况二:k 0 j0 { Bound[i][k] Bound[i][j]; Bound[i][j] 0; RandNum_nFalge 1; } else //情况三:k ! j j 0 { Bound[i][--k] Bound[i][j]; if (k ! j) { Bound[i][j] 0; RandNum_nFalge 1; } } } } } } //上移动 void MoveUp() { for (int i 0; i 4; i) //一共有4列 { for (int k 0, j 1; j 4; j) //每一列都是有4个数 { if (Bound[j][i] 0) //这个里面j为时刻变化的 数组行 i为每一轮变化一次的数组的列这里面注意体会s数组的i和j的循环和数组里面的区别 { if (Bound[j][i] Bound[k][i]) //情况一:k j j 0 { Score Bound[k][i] * 2; Bound[j][i] 0; RandNum_nFalge 1; } else if (Bound[k][i] 0) //情况二:k 0 j0 { Bound[k][i] Bound[j][i]; Bound[j][i] 0; RandNum_nFalge 1; } else //情况三:k ! j j 0 { Bound[k][i] Bound[j][i]; if (k ! j) { Bound[j][i] 0; RandNum_nFalge 1; } } } } } } //下移动 void MoveDown() { for (int i 0; i 4; i) //一共有4列 { for (int k 3, j 2; j 0; j--) //每一列都是有4个数 { if (Bound[j][i] 0) //这个里面j为时刻变化的 数组行 i为每一轮变化一次的数组的列这里面注意体会s数组的i和j的循环和数组里面的区别 { if (Bound[j][i] Bound[k][i]) //情况一:k j j 0 { Score Bound[k--][i] * 2; Bound[j][i] 0; RandNum_nFalge 1; } else if (Bound[k][i] 0) //情况二:k 0 j0 { Bound[k][i] Bound[j][i]; Bound[j][i] 0; RandNum_nFalge 1; } else //情况三:k ! j j 0 { Bound[--k][i] Bound[j][i]; if (k ! j) { Bound[j][i] 0; RandNum_nFalge 1; } } } } } } //控制游戏的键盘输入 void KeyboardInput() { //char ch; switch (_getch()) { case w: case W: MoveUp(); break; case a: case A: MoveLeft(); break; case s: case S: MoveDown(); break; case d: case D: MoveRight(); break; default: break; } } //绘画出一行数字 void ShowNum_a_Line(int i) { printf_s( ┃ ┃ ┃ ┃ ┃\n); printf_s( ┃); for (int j 0; j 4; j) { if (0 ! Bound[i][j]) { printf_s( %5d ┃, Bound[i][j]); } else { printf_s( ┃, Bound[i][j]); } } printf_s(\n); printf_s( ┃ ┃ ┃ ┃ ┃\n); } //检测空余的各自的个数 int nCountNullNum() { int n 0; for (int i 0; i 4; i) { for (int j 0; j 4; j) { if (0 Bound[i][j]) n; } } return n; } //生成随机数(该函数只赋值一个空格) void RandNum() { srand((unsigned int)time(NULL)); int n rand() % nCountNullNum(); for (int i 0; i 4; i) { for (int j 0; j 4; j) { if (0 n) //第n个为0的个子 { Bound[i][j] rand() % 3 ? 2 : 4; //数组随机生成的第n个为0的空格子随机赋值的2的该路是4的2倍 goto a; } if (0 Bound[i][j]) //数到第那n个位0的空格子 { n--; } } } a:; RandNum_nFalge 0; } void ShowWindows() { printf_s(\n\n\n 游戏名字:2048 分数:%-6d 开发者:诗情画意\n, Score); printf_s( ------------------------------------------------------------------------------------------\n); printf_s( ┏━━━━━━━━━━┳━━━━━━━━━━┳━━━━━━━━━━┳━━━━━━━━━━┓\n); for (int i 0; i 4; i) { if (i 3) { ShowNum_a_Line(i); printf_s( ┣━━━━━━━━━━╋━━━━━━━━━━╋━━━━━━━━━━╋━━━━━━━━━━┫\n); } if ( 3 i) { ShowNum_a_Line(i); printf_s( ┗━━━━━━━━━━┻━━━━━━━━━━┻━━━━━━━━━━┻━━━━━━━━━━┛\n); } } printf_s(\n\n W:↑ A:← S:↓ D:→\n); } //游戏开始之前随机初始化两个格子 void StartDate() { RandNum(); RandNum(); } //游戏是否结束 void CheckGameOver() { int n1 0, n2 0;//横着、竖着两个两个不相等的 次数 的计数器 for (int i 0; i 4; i) //横着横着2个进行比较 { for (int j 0; j 3; j) { if (Bound[i][j] ! Bound[i][j 1]) { n1; //n1最多只会比较12次 } if (Bound[i][j] 2048) //单独的一个判断单个的Bound[][]是否大于2048大于就说明游戏结束胜利 { Gameover_nFlage 2; } } } for (int i 0; i 4; i) //竖着竖着2个进行比较 { for (int j 0; j 3; j) { if (Bound[j][i] ! Bound[j 1][i]) { n2; //n2最多只会比较12次 } } } if (n1 12 n2 12) { Gameover_nFlage 1;//游戏结束游戏失败 } } //开始游戏循环 void StartGame() { system(title 2048); //改控制台标题名称 system(color 0e); //改控制台标题背景和内容的颜色 //游戏开始位置代码---------------------一局游戏完整 StartDate(); while (true) { ShowWindows(); KeyboardInput(); CheckGameOver(); if (1 Gameover_nFlage) //判断游戏结束的两种方法Gameover_nFlage 1 或 2 { printf_s(游戏失败GAME OVER\n); } if (2 Gameover_nFlage) { printf_s(游戏胜利GAME SUCCESS\n); } if (1 RandNum_nFalge) { RandNum(); } system(cls); } //游戏结束位置代码---------------------一局游戏完整 }
版权声明:本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若内容造成侵权/违法违规/事实不符,请联系邮箱:809451989@qq.com进行投诉反馈,一经查实,立即删除!

端州网站建设文昌网站 做炸饺子

基于MPC的永磁同步电机非线性终端滑模控制仿真研究 matlab simulink 无参考文件在电机控制领域,永磁同步电机(PMSM)以其高效、高功率密度等优点,广泛应用于工业、交通等诸多领域。为了实现PMSM更加精准、高效的控制,各…

张小明 2026/1/4 15:33:06 网站建设

中小学网站建站模板宛城区微网站开发

开源中国Gitee项目页优化:提升DDColor老照片修复项目的社区影响力 在数字时代,一张泛黄的老照片不仅承载着个体记忆,也记录着一个时代的集体影像。然而,传统黑白照片普遍存在褪色、划痕、模糊等问题,人工修复成本高且周…

张小明 2026/1/3 20:28:09 网站建设

pc蛋蛋网站怎么做怎么改wordpress的html

互联网大厂Java面试纪实:微服务、消息队列与AI实战全流程拆解 故事背景 谢飞机,众所周知的“水货程序员”,终于闯入了互联网大厂的技术面试现场。面试官一脸严肃,谢飞机依旧轻松诙谐。三轮面试,场景依次为内容社区、AI…

张小明 2026/1/4 8:00:00 网站建设

国内十大网站制作公司上海人才网官方网站

Wan2.2-T2V-5B 能生成影子吗?光照一致性深度评测 🌞📽️ 你有没有试过让 AI 生成一段“阳光斜照、人影移动”的视频? 结果却发现——影子一会儿在左,一会儿在右,甚至同一帧里树影和人影方向都不一致……&am…

张小明 2026/1/3 17:43:14 网站建设

网站建设合同要不要交印花税移动端公众号网站开发

第一章:智谱Open-AutoGLM沉思在人工智能与大语言模型飞速演进的今天,Open-AutoGLM 作为智谱推出的自动化生成语言模型框架,正悄然重塑开发者对智能推理系统的认知。它不仅融合了 GLM 架构的强大语义理解能力,更通过自动化提示工程…

张小明 2026/1/4 15:33:07 网站建设

网站中文域名好不好企业官方网站建设的作用

安装ipykernel并在Jupyter中注册自定义Kernel名称 在现代AI和数据科学开发中,一个常见的场景是:你刚接手一个项目,兴奋地打开Jupyter Notebook准备复现论文结果,却在导入PyTorch时遇到版本不兼容的报错——原来这个项目依赖的是旧…

张小明 2026/1/4 3:30:28 网站建设