小白练手——2048数字游戏

C++ Qt 实现小游戏2048 原创,转载请注明出处。 这里用Qt实现了小游戏2048,基本实现了2048的功能,是C++,Qt的必备练手项目,界面设置如下图: 通过在界面上的按钮上下左右控制数字,实现运算,并且记录分数,游戏的玩法跟2048相同,接下来具体介绍。 在创建时使用QWidget ,并创建界面文件。 用于显示数字的区域使用QTextEdit。截图如下: 在boardwidget.h文件里的代码如下: #ifndef... 阅读详情

1.本项目基于github项目
2.做了些许优化,练手用,代码共200多行
4.外观如下
启动页面 运行界面
##html

<!DOCTYPE html>
<html>
<head>
<meta charset="UTF-8">
<title>2048小游戏</title>
<link rel="stylesheet" href="2048.css">
<script src="http://code.jquery.com/jquery-latest.js"></script>
</head>

<body>
	<div id="div2048">
		<p id="score">score:0&nbsp;&nbsp;highest:0</p>
		<a id="start" ><br><br><br><br><br>**,点击鼠标开始游戏<br>请使用方向键或WSAD操作</a>
	</div>
	<script type="text/javascript" src="2048.js"></script>
</body>
</html>

##CSS

@CHARSET "UTF-8";
#div2048
{
	width: 500px;
	height: 600px;
	background-color: #b8af9e;
	margin: 0 auto;//中间不能加逗号
	position: relative;
	
}
#score
{
	margin: 0 auto;
	width: 500px;
	height: 40px;
	line-height: 40px;
	padding: 30px 0;
	font-size: 40px;
	text-align: center;
	color:pink;
	background: #ccc0b2;
	display:none;
}
#start
{
	width: 500px;
	height: 600px;
	line-height: 50px;
	display: block;
	text-align: center;
	font-size: 25px;
	background:url("合照.ico");
    color: #FFFFFF;
}
#div2048 div.cell
{
	margin: 20px 0px 0px 20px;
	width: 100px;
	height: 40px;
	line-height: 40px;
	padding: 30px 0;
	font-size: 40px;
	text-align: center;
	float: left;
}
#div2048 div.cell0{
	background: #ccc0b2;
}
#div2048 div.cell2
{
    color: #7c736a;
    background: #eee4da;
}
#div2048 div.cell4
{
    color: #7c736a;
    background: #ece0c8;
}
#div2048 div.cell8
{
    color: #fff7eb;
    background: #f2b179;
}
#div2048 div.cell16
{
    color:#fff7eb;
    background:#f59563;
}
#div2048 div.cell32
{
    color:#fff7eb;
    background:#f57c5f;
}
#div2048 div.cell64
{
    color:#fff7eb;
    background:#f65d3b;
}
#div2048 div.cell128
{
    color:#fff7eb;
    background:#edce71;
}
#div2048 div.cell256
{
    color:#fff7eb;
    background:#edcc61;
}
#div2048 div.cell512
{
    color:#fff7eb;
    background:#ecc850;
}
#div2048 div.celle1024
{
    color:#fff7eb;
    background:#edc53f;
}
#div2048 div.cell2048
{
    color:#fff7eb;
    background:#eec22e;
}

##JavaScript

(function(){
	function game2048(container) {
		this.container=container;
		this.cells=new Array(16);
	}
	game2048.prototype={		
			init:function(){
				for ( var i=0;i<this.cells.length;i++) {
					var cell = this.newCell(0);
					this.container.appendChild(cell);
					this.cells[i]=cell;
				}
				this.randomCell();
				this.randomCell();
			},
				
			newCell:function(num){
				var cell=document.createElement('div');
				this.setCellNum(cell,num);
				return cell;
			},
			
			setCellNum:function(cell,num){
				cell.className='cell cell'+num;
				cell.num=num;
				cell.innerHTML=num>0?num:'';
			},
			
			randomCell:function(){
				var rm=[];
				for ( var i=0;i<16;i++) {
					if (this.cells[i].num==0) {
						rm.push(this.cells[i]);
					}
				}
				var rmCell =  rm[Math.floor(Math.random()*rm.length)];
				this.setCellNum(rmCell,Math.random()>0.8?4:2);
			},
			
			//java在遍历集合时不方便改值,js可以
			move:function(dir){
				var index;
				switch (dir) {
				case 38:case 87://up
					for (var i = 4; i < 16; i++) {
						index=i;
						while (index>=4) {
							this.merge(this.cells[index-4],this.cells[index]);
							index=index-4;
						}
					}
					break;
				case 40:case 83://down
					for (var i = 11; i >=0; i--) {
						index=i;
						while (index<12) {
							this.merge(this.cells[index+4],this.cells[index]);
							index=index+4;
						}
					}
					break;
				case 37:case 65://left
					for (var i = 1; i < 16; i++) {
						index=i;
						while (index%4!=0) {
							this.merge(this.cells[index-1],this.cells[index]);
							index=index-1;
						}
					}
					break;
				case 39:case 68://right
					for (var i = 14; i >= 0; i--) {
						index=i;
						while (index%4!=3) {
							this.merge(this.cells[index+1],this.cells[index]);
							index=index+1;
						}
					}
					break;
				}
				this.randomCell();
			},
			
			merge:function(cell1,cell2){
				var cell1Num = cell1.num;
				var cell2Num = cell2.num;
				if(cell2Num!=0){
					if (cell1Num==0) {
						this.setCellNum(cell1, cell2Num);
						this.setCellNum(cell2, 0);
					} else if(cell1Num==cell2Num) {
						this.setCellNum(cell1, cell1Num*2)
						this.setCellNum(cell2, 0);
					}
				}
			},
				        
	        over:function(){
	        	for (var i = 0; i < this.cells.length; i++) {
	        		if (this.cells[i].num==0) {
	        			return false;
	        		}
	        		if (i%4!=3 && this.cells[i].num==this.cells[i+1].num) {
	        			return false;
	        		}
	        		if (i<12 && this.cells[i].num==this.cells[i+4].num) {
	        			return false;
	        		}
	        	}
	        	return true;
	        },
	        
			clean:function(){
				for (var i = 0; i < this.cells.length; i++) {
					this.container.removeChild(this.cells[i]);
				}
			},
			score:function(){
				var scoreNum=0;
				for(var x=0;x<16;x++){
					scoreNum=scoreNum+this.cells[x].num;
				}
				return scoreNum;
			},
			
		}
	
	var game,startBtn,scoreHeader,score,highestScore;
	window.οnlοad=function(){
		var container = document.getElementById('div2048');
		startBtn=document.getElementById('start');
		scoreHeader=document.getElementById('score');
		highestScore=0;
		startBtn.οnclick=function(){
			this.style.display='none';
			scoreHeader.style.display='block';
			game=new game2048(container);
			game.init();
		}
	}
		
	window.οnkeydοwn=function(e){
		var keynum;
		if(window.event){
			keynum=e.keyCode;
		}
		else if (e.which) {
			keynum=e.which;
		}
		if ([37,38,39,40,87,65,83,68].indexOf(keynum)>-1) {
			if (game.over()) {
				game.clean();
				startBtn.style.display='block';
				scoreHeader.style.display='none';
				if(score==highestScore){
					startBtn.innerHTML="<br><br><br><br><br>**大人创造了得分纪录:"+score+"分<br>厉害的宝宝该去学习了";
				}else {
					startBtn.innerHTML="<br><br><br><br><br>**大人最终得分"+score+"分<br>没有打破纪录的笨宝宝该去学习了呢";
				}
				
				scoreHeader.innerHTML="score:0&nbsp;&nbsp;highest:"+highestScore;
				return;
			}
			game.move(keynum);
			score=game.score();
			highestScore=score>highestScore?score:highestScore;
			scoreHeader.innerHTML="score:"+score+"&nbsp;&nbsp;highest:"+highestScore;
		}
	}
})();
【C语言/C++】益智游戏开发:2048(源码详解) 前言 C/C++作为元老级的编程语言,任时光更迭依旧屹立不倒,哪怕如今炙手可热的AI,其底层也是用其编写。C/C++可以说是永不过时的语言。 那么作为新手该如何上手这门语言?一切不敲代码的学编程手段都是扯淡 今天小编就推荐一个适合新手练手的C/C++项目:制作益智游戏2048 话不多说,咱直接开始~ C/C++制作益智游戏2048 1.编译环境 Win10专业版x64 VS2015 2.项目运行效果 3.思路简介: 游戏规则: 游戏的规则很简单,你需要控制所有方块向同一个方向运动,两个相同数字的 阅读详情

相关推荐

C/C++制作益智游戏:2048(源码详解)

前言 C/C++作为元老级的编程语言,任时光更迭依旧屹立不倒,哪怕如今炙手可热的AI,其底层也是用其编写。C/C++可以说是永不过时的语言。 那么作为新手该如何上手这门语言?一切不敲代码的学编程手段都是扯淡 今天小编就推荐一个适合新手练手的C/C++项目:制作益智游戏2048 话不多说,咱直接开始~ C/C++制作益智游戏2048 1.编译环境 Win10专业版x64 VS2015 2.项目运行效果 3.思路简介: 游戏规则: 游戏的规则很简单,你需要控制所有方块向同一个方向运动,两个相同数字的方块

pangzizzzz的博客 3470

JavaScript购物车小项目

目录 前言 一、登陆界面的制作 登陆界面 注册界面 代码详情 1.商品促销界面 详情解析: 代码详情: 操作指南: 1.登录注册界面: 2.商城界面 3.购物车界面 总结 前言 大家还记得上次给大家分享的购物车功能的实现吗?今天就来给大家分享最近做的一个个人小项目,就用到了上次给大家分享的购物车功能哦,大家快来一起动手尝试一下吧。 一、登陆界面的制作 主要运用CSS的知识来实现界面的排版制作。 效果图: 登陆界面 具有用户名和密码框,密码框做了加密(密码不可视) ..

weixin_65474399的博客 3237

Java实现2048数字拼接游戏项目实战

int[4][4]回过头来看,2048 虽然简单,但它融合了多个软件工程的核心思想:数据驱动设计:用二维数组建模状态,一切变化基于数据演进事件驱动架构:用户行为作为事件输入,推动状态迁移模块化分工:棋盘管理、输入解析、渲染分离,各司其职边界防护:防抖、锁、空值检测,构建鲁棒系统用户体验优先:响应及时、反馈明确、防误操作这些东西单独看都不难,但组合起来却能创造出令人上瘾的游戏体验。💬 正如一位老程序员所说:“伟大的系统往往诞生于简单的规则。

weixin_42284380的博客 989

javaScript的一些小项目01-Drum Kit架子鼓

01-Drum Kit架子鼓: 说明: 这主要的功能是: 1、当我在键盘上按下相应的按键,他就会发出相应的声音 2、当按下去的时候会有高亮的效果 3、状态需要恢复到原来的状态 主要效果图预览: 主要代码: <!DOCTYPE html> <html lang="en"> <head> <meta charset="UTF-8"> <title>JS Drum Kit</title> &lt..

m0_57446284的博客 603

javascript实现2048小游戏_V1.0.0

原生Js编写一款2048小游戏 涉及点: 鼠标上移、下移、左移、右移 鼠标释放之后移动方块,包括方块数字叠加 方块移动/叠加处理完成之后随机产生新的方块 判断是否没有可移动的方块了,提示游戏接受

某培训微专业WEB前端开发作业 html,css,js作业适合练手的项目

前端开发,js,css, html ,H5课程作业,练习题

Java Script 一些有趣易上手的小项目

使用Java做一些有趣的项目,检验自己的学习成果(来自MDN)

qq_51474764的博客 1420

js小项目练习

使用jquery写的一些小例子,比如菜单,星级评分,轮播图,拖拽上传等效果源码。

JavaScript 为小游戏项目添加图片(游戏)

<script>function runSlots() {var slotOne;var slotTwo;var slotThree; var images = ["https://www.w3cschool.cn/statics/codecamp/images/9H17QFk.png", "https://www.w3cschool.cn/statics/codecamp/imag...

weixin_33826609的博客 705

30js:30个小型Javascript项目,为期30天(4月)

30js 30个小型Javascript项目,为期30天(4月) 从今天的4月1日到4月30日,我将构建迷你javascript项目。 对于每一天,我都会建立一个项目。 这是尝试提高我的前端开发技能的尝试。 每个项目都有其文件夹。 专案 扩充卡 实时网址= 进度步骤 旋转导航 实时网\u5740=

javascript实现2048游戏示例

主要介绍了javascript实现2048游戏示例,需要的朋友可以参考下

小白练手—2048数字游戏

1.花了半天写的,得心应手,实现了所有功能,包括最高分的本地存储 2.很适合j2se阶段新手学习 3.算法一般,没做太多优化

Manyu_Java的博客 639

基于Dify1.9知识库流水线模板的思考——图像和表格数据处理

本文探讨了Dify1.9知识库流水线中LLM节点对文档图像/表格增强处理的优化方案。针对当前仅在内容后追加说明的简单做法,提出了结构化标注的改进方法:通过唯一ID和注释块标记图像/表格及其描述,确保内容可精准对齐。文章详细阐述了该方案的解析处理流程、数据结构化表示方法,以及在RAG检索和文档还原中的具体应用。关键经验包括:必须结构化标注非文本内容、LLM增强的必要性、语义向量化处理等。该方案解决了原始方法在内容重排、相似元素区分和检索精度等方面的问题。

roseey的专栏 1438

Android案例算法——2048游戏

2048的确是风靡了一段时间,这种游戏对于初学android的人来说是很好的练手项目,还有俄罗斯方块什么的都是可以拿来练手的 下面我来说一下2048这款游戏的一种算法 2048是怎么个规则,大家都知道的吧 最初是两个随机位置出现的随机数字(2或4) 比如2 2 0 4,手指往左一滑,就会变成4 4 0 0   这里的0就是代表无方块  2和2生成的4是不会和后面的4合并的 比如2 2 4

Get_Better的博客 1028

INCA基础教程

以软件自带Demo为例记录INCA学习过程,主要内容包括测量与标定。

yunqianrui的博客 6万+

Unity3D实战:用EasyAR4.0稀疏空间地图打造AR导航应用(附完整代码)

本文详细介绍了如何使用Unity3D和EasyAR4.0的SparseSpatialMap功能构建AR导航应用。通过稀疏空间地图技术,开发者可以创建室内导航系统,解决传统GPS在室内环境中的局限性。文章包含完整代码示例,涵盖环境配置、地图构建、导航实现及性能优化等关键步骤,助力开发者快速掌握AR导航开发技巧。

t8u9v0的博客 1197

2048游戏简单实现

前言 最近突然心血来潮想写一个网页小游戏,我看网上有很多人推荐写2048来练练手,遂开始写。目前为止,基本功能已经实现,只是没有添加相应的动画效果,待以后有机会补上(其实我就是动画这块太菜了 T_T) 前方长文预警!!! 游戏截图 项目结构 这个项目结构挺简单的,应该也都看得懂,在此仅对js文件夹进行描述,其余的就不再赘述啦 (main.js是入口文件,move.js主...

Aimee_ice的博客 7528

改进YOLOv9的CT图像肺结节检测与分类算法:从原理到实战

本文将详细介绍如何改进YOLOv9算法,使其更好地适应CT图像肺结节检测与分类任务。我们将从数据集准备、模型改进、训练优化到最终部署,完整呈现一个端到端的深度学习项目,并提供完整的代码实现。

YOLO 188

javascript实现2048小游戏

最近打算系统的学习一下javascript,想做点项目练手,就选择用javascript实现我比较喜欢玩的2048游戏,大体完成以后还是蛮有成就感的。 游戏相关截图:

funwj的博客 3万+

芯片研发完整全流程

芯片研发全流程可分为需求与架构设计、前端逻辑设计、后端物理设计、晶圆制造、封装测试五大阶段,涉及16个核心步骤。研发过程需要多学科交叉协作,包括微电子、物理、材料、计算机等。关键注意事项包括验证优先、工艺约束遵循、可测性设计等。芯片设计需要绘制纳米级精度的物理版图,而非传统工程图纸,需使用专业EDA工具而非KiCad这类PCB设计软件。完整研发流程具有高投入、高风险特点,需严格遵循行业标准和规范。

weixin_44520581的博客 235

别让 Claude Code 一直问你“能不能执行“:权限配置完全指南

Claude Code 提供了一套精细的权限配置机制,配置好权限设置,可以提速不少。这个小技巧需要掌握一下。

沐风 3843

python练手项目:2048实现与总结

python练手项目:利用curses界面对2048的实现与总结涉及的知识点基本实现UI展示curses的初始化方法:wrappercurses的屏幕展示语句:addscrcurses正式开画游戏运行引擎引擎分析从“程序运行”到“状态名称”从“状态名称”到“程序运行”游戏数据的生成游戏数据的演变知识点 本练手项目参考自实验楼:200 行 Python 代码实现 2048 涉及的知识点 curse...

u010884538的博客 3918

【LLC快速上手系列】如何在LLC谐振里优雅地调死区时间?

用示波器死盯Vds波形,找到ZVS临界点;别听“经验值”,亲自调才准;死区时间并非越短越好,也不是越长越稳,而是要“刚刚好”;用热成像看MOSFET温升变化,ZVS调好了,温度马上掉2~5℃;轻载难ZVS?适当提升频率 or 降低Lr可破!

weixin_43199439的博客 493

python练手小项目2048

如果你想体验一下 http://gabrielecirulli.github.io/2048 源代码 https://pan.baidu.com/s/1_LoS5QsQwjG3NQz_8pAGHg 提取码2sgz 借鉴一下大佬的 https://blog.youkuaiyun.com/weixin_42668123/article/details/82381568 2048游戏规则:简单的移动方向键让数字叠加,并且获得这些数字每次叠加后的得分,当出现2048这个数字时游戏胜利。同时每次移动方向键时,都会在这个4*4的

a1111111111ss的博客 320

文档:亲测可用解决vnc灰屏,黑屏,鼠标大黑叉情况

主要解决vnc-viewer灰屏,黑屏,鼠标大黑叉等现象,详细见文档。

计算机控制技术及应用

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

Android项目开发—2048小游戏

自学android一段时间了,自我感觉android基础学的差不多了,现在感觉也遇上了一些瓶颈,所以找来一些小项目练练手,实践一下,才知道自己到底会什么,到底不会什么,这篇文章是挺久之前做的一个小游戏——2048的一个个人总结,同时附上源代码和项目视频。 开发环境:windows 7 集成开发环境:eclipse/Android studio ...

aift的专栏 3万+

C# WinForm 基于DirectShow.dll编写的程序,可边预览边保存视频,音频和图片

基于微软的DirectShow.dll的二次开发1.自动识别连接的摄像头跟麦克风且可以对其进行选择(默认选中第一个)2.可录制wmv和avi两种格式的视频并且都带有音频,avi可以录制的分辨率和帧数进行选择,wmv默认进行了淸晰度优化如不喜欢可去除代码中有相关提示3.可在预览点开之后进行拍照,也可边录制视频边拍照4.添加了视频和音频的压缩功能(酌情使用)这次二次开发发现C#对DirectShow的相关信息太少,这次做完也不敢藏私共享出来,还望大家指正

上一篇: 小白练手—2048数字游戏
下一篇: JavaWeb细节——jstl导入eclipse报错
bug斗罗
博客等级 码龄10年 8粉丝 29原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

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

抵扣说明:

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

余额充值