【水】基于ege的2048
不要问我ege怎么装
http://tieba.baidu.com/p/2227018541
好,现在我们装好了ege
开始写2048吧
没有算法,单纯模拟,不用讲解——这才叫【水】的含义
界面极度简单,不喜勿喷
#include<iostream>
#include <math.h>
#include <cstdlib>
#include <fstream>
#include <Windows.h>
#include <direct.h>
#include <graphics.h>
#include <string.h>
#include <time.h>
#include <math.h>
#include <string.h>
using namespace std;
int a[][];
int size;
int zj;
int jg;
int _lb;
int tou;
int han;
int sd;
int yc;
int bkr,bkg,bkb,wzr,wzg,wzb,btr,btg,btb;
color_t bk;
color_t wz;
color_t bt;
bool bo;
unsigned long long score=;
bool p[];
PIMAGE bl[];
unsigned int see;
int GetDirection() //读取方向
{
int ret = ; do
{
int ch = getch();
switch(ch)
{
case 'w':
ret = ; // top
break;
case 'a':
ret = ; // left
break;
case 'd':
ret = ; // right
break;
case 's':
ret = ; // down
break;
default:
break;
}
} while (ret == ); return ret;
}
int ha(int k)
{
int j=,i=;
for(;j!=k;i++)
j*=;
return i;
}
void print()
{
cleardevice();
setcolor(bt);
setfont(tou,tou/,"楷体");
xyprintf(,,"分数%llu",-score);
xyprintf(,tou,"种子%d",see);
for(int i=;i<=;i++)
for(int j=;j<=;j++)
if(a[i][j]!=)
putimage(j*(size+jg)-size-jg+_lb,*tou+han+i*(size+jg)-size-jg,bl[ha(abs(a[i][j]))],SRCCOPY);
}
int add()//增加数
{
int sum=;
int x[],y[];//空的格子的列表
for(int i=;i<=;i++)
for(int j=;j<=;j++)
if(!a[i][j])
{
x[++sum]=i;
y[sum]=j;
}
int p=(rand()%==)?:;//生成的数
int q=rand()%sum+;//列表里挑一个
a[x[q]][y[q]]=p;
print();
delay_ms();
return ;
}
bool over()
{
for(int i=;i<=;i++)
for(int j=;j<=;j++)
if((a[i][j]==)||(a[i][j]==a[i-][j])||(a[i][j]==a[i+][j])||(a[i][j]==a[i][j+])||(a[i][j]==a[i][j-]))
return ;
if(MessageBox(NULL,"就喜欢你看不惯我又**不到我的感觉","你跪了",MB_RETRYCANCEL)==)
{
for(int i=;i<=;i++)
for(int j=;j<=;j++)
a[i][j]=;
score=;
add();
return ;
}
else
{
closegraph();
return ;
}
}
int _up()
{
for(int i=;i<=;i++)
for(int j=;j<=;j++)
if((a[i][j]!=)&&((a[i-][j]==a[i][j])||(a[i-][j]==)))
{
bo=;
int ii=i;
while((ii>)&&(a[--ii][j]==));
if(a[ii][j]==a[i][j])
{
int ls=a[i][j];
a[i][j]=;
cleardevice();
for(int zh=;zh<=(i-ii)*size;zh+=sd)
{
print();
putimage(j*(size+jg)-size-jg+_lb,*tou+han+i*(size+jg)-size-jg+_lb-zh,bl[ha(ls)],SRCCOPY);
delay_ms(yc);
}
a[ii][j]*=;
a[ii][j]=-a[ii][j];
score+=a[ii][j];
print();
}
else
{
int ls=a[i][j];
a[i][j]=;
ii++;
for(int zh=;zh<=(i-ii)*size;zh+=sd)
{
print();
putimage(j*(size+jg)-size-jg+_lb,*tou+han+i*(size+jg)-size-jg+_lb-zh,bl[ha(ls)],SRCCOPY);
delay_ms(yc);
}
a[ii][j]=ls;
print();
}
}
return ;
}
int _down()
{
for(int i=;i>=;i--)
for(int j=;j<=;j++)
if((a[i][j]!=)&&((a[i+][j]==a[i][j])||(a[i+][j]==)))
{
bo=;
int ii=i;
while((ii<)&&(a[++ii][j]==));
if(a[ii][j]==a[i][j])
{
int ls=a[i][j];
a[i][j]=;
for(int zh=;zh<=(ii-i)*size;zh+=sd)
{
print();
putimage(j*(size+jg)-size-jg+_lb,*tou+han+i*(size+jg)-size-jg+_lb+zh,bl[ha(ls)],SRCCOPY);
delay_ms(yc);
}
a[ii][j]*=;
a[ii][j]=-a[ii][j];
score+=a[ii][j];
print();
}
else
{
int ls=a[i][j];
a[i][j]=;
ii--;
for(int zh=;zh<=(ii-i)*size;zh+=sd)
{
print();
putimage(j*(size+jg)-size-jg+_lb,*tou+han+i*(size+jg)-size-jg+_lb+zh,bl[ha(ls)],SRCCOPY);
delay_ms(yc);
}
a[ii][j]=ls;
print();
}
}
return ;
}
int _left()
{
for(int i=;i<=;i++)
for(int j=;j<=;j++)
if((a[i][j]!=)&&((a[i][j-]==a[i][j])||(a[i][j-]==)))
{
bo=;
int ii=j;
while((ii>)&&(a[i][--ii]==));
if(a[i][ii]==a[i][j])
{
int ls=a[i][j];
a[i][j]=;
for(int zh=;zh<=(j-ii)*size;zh+=sd)
{
print();
putimage(j*(size+jg)-size-jg+_lb-zh,*tou+han+i*(size+jg)-size-jg+_lb,bl[ha(ls)],SRCCOPY);
delay_ms(yc);
}
a[i][ii]*=;
a[i][ii]=-a[i][ii];
score+=a[i][ii];
print();
}
else
{
int ls=a[i][j];
a[i][j]=;
ii++;
for(int zh=;zh<=(j-ii)*size;zh+=sd)
{
print();
putimage(j*(size+jg)-size-jg+_lb-zh,*tou+han+i*(size+jg)-size-jg+_lb,bl[ha(ls)],SRCCOPY);
delay_ms(yc);
}
a[i][ii]=ls;
print();
}
}
return ;
}
int _right()
{
for(int i=;i<=;i++)
for(int j=;j>=;j--)
if((a[i][j]!=)&&((a[i][j+]==a[i][j])||(a[i][j+]==)))
{
bo=;
int ii=j;
while((ii<)&&(a[i][++ii]==));
if(a[i][ii]==a[i][j])
{
int ls=a[i][j];
a[i][j]=;
for(int zh=;zh<=(ii-j)*size;zh+=sd)
{
print();
putimage(j*(size+jg)-size-jg+_lb+zh,*tou+han+i*(size+jg)-size-jg+_lb,bl[ha(ls)],SRCCOPY);
delay_ms(yc);
}
a[i][ii]*=;
a[i][ii]=-a[i][ii];
score+=a[i][ii];
print();
}
else
{
int ls=a[i][j];
a[i][j]=;
ii--;
for(int zh=;zh<=(ii-j)*size;zh+=sd)
{
print();
putimage(j*(size+jg)-size-jg+_lb+zh,*tou+han+i*(size+jg)-size-jg+_lb,bl[ha(ls)],SRCCOPY);
delay_ms(yc);
}
a[i][ii]=ls;
print();
}
}
return ;
}
color_t gc(int k)
{
if(k<=)
return EGERGB(+*k,+*k,);//0x9999FF;102 204 153
else
return EGERGB(,-*(k-),-*(k-));
}
int initblock(int k)
{
setbkcolor(gc(k),bl[k]);
setcolor(bk,bl[k]);
for(int i=;i<size;i++)
if(i<zj)
{
line(,i,zj-(int)sqrt(zj*zj-(zj-i)*(zj-i)),i,bl[k]);
line(size-zj+(int)sqrt(zj*zj-(zj-i)*(zj-i)),i,size,i,bl[k]);
}
else
if(i>=size-zj)
{
line(,i,zj-(int)sqrt(zj*zj-(size-zj-i)*(size-zj-i)),i,bl[k]);
line(size-zj+(int)sqrt(zj*zj-(size-zj-i)*(size-zj-i)),i,size,i,bl[k]);
}
char poi[];
itoa( << k,poi,);
setcolor(wz,bl[k]);
int _k=,__k=<<k;
while(__k>)
{
_k++;
__k/=;
}
setfont(-size/,size/(_k+),"宋体",bl[k]);
outtextxy(size/(_k+),size/,poi,bl[k]);
return ;
}
void init()
{
initgraph(size*+jg*+_lb*,*tou+jg*+han+size*);
setcaption("");
SetTransparent(getHWnd,,BLACK);
setrendermode(RENDER_MANUAL);
for(int i=;i<=;i+=)
{
bl[i]=newimage(size,size);
initblock(i);
}
setbkcolor(bk);
}
int main()
{
scanf("%d",&see);
srand(see);
fstream _file;
_file.open("set.txt",ios::in);
if(!_file)
{
freopen("set.txt","w",stdout);
if(MessageBox(NULL,"你还没建配置文件,是否自动创建\nUnless you know exactly what you're doing,\nis is recommended that you click 确定","我**你妈",MB_OKCANCEL)==)
printf("100\n20\n20\n10\n100\n10\n10\n1\n102\n204\n255\n0\n0\n0\n248\n217\n111\n");
else
system("notepad set.txt");
fclose(stdout);
}
freopen("set.txt","r",stdin);
scanf("%d%d%d%d%d",&size,&zj,&jg,&_lb,&tou);
scanf("%d%d%d%d%d",&han,&sd,&yc,&bkr,&bkg);
scanf("%d%d%d%d%d",&bkb,&wzr,&wzg,&wzb,&btr);
scanf("%d%d",&btg,&btb);
fclose(stdin);
bk=EGERGB(bkr,bkg,bkb);
wz=EGERGB(wzr,wzg,wzb);
bt=EGERGB(btr,btg,btb);
init();
add();
while(true)
{
if(over())
return ;
if(bo)
add();
bo=;
int c=GetDirection();
switch(c)
{
case :
_left();
if(!bo)
p[]=;
break;
case :
_up();
if(!bo)
p[]=;
break;
case :
_right();
if(!bo)
p[]=;
break;
case :
_down();
if(!bo)
p[]=;
break;
}
for(int i=;i<=;i++)
for(int j=;j<=;j++)
a[i][j]=abs(a[i][j]);
}
return ;
}
【水】基于ege的2048的更多相关文章
- 【水】基于ege的简单3D模拟
我们模拟从被观察物体射出光线,在眼球焦点交汇,然后打到视网膜上成像 ——足够了吧,剩下的难度应该是普及- 只是有一些常数可以自己调一下,看着顺眼就好 #include <graphics.h&g ...
- 基于jQuery的2048小游戏设计(网页版)
上周模仿一个2048小游戏,总结一下自己在编写代码的时候遇到的一些坑. 游戏规则:省略,我想大部分人都玩过,不写了 源码地址:https://github.com/xinhua6/2048game.g ...
- 基于linux 的2048
在 debian 下写了一个 2048, 效果如下: 感兴趣的朋友可以在这里(http://download.csdn.net/download/kamsau/7330933)下载. 版权声明:本文为 ...
- D4下午
开始学图论辣 图的基本模型 图是点和边组成的集合体,G = <V, E> v是点集,e是边集 还有就是有向图无向图啥的 算了太水了不写了 提几个没大见过的吧 环 环上任意两点间可以随意到达 ...
- 基于Monte Carlo方法的2048 A.I.
2048 A.I. 在 stackoverflow 上有个讨论:http://stackoverflow.com/questions/22342854/what-is-the-optimal-algo ...
- 从零开始的DIY智能家居 - 基于 ESP32 的智能水浊度传感器
前言 家里有个鱼缸养了几条鱼来玩玩,但是换水的问题着实头疼,经常一个不注意就忘记换水,鱼儿就没了.o(╥﹏╥)o 在获得 Spirit 1 边缘计算机 后就相当于有了一个人智能设备服务器,可以自己开发 ...
- (原创)基于FPGA的调光流水灯(Verilog,CPLD/FPGA)
1.Abstract 前几天做了一个呼吸灯,觉得确实挺有意思的:可惜的是只有一个灯管亮,板子上有四个灯,要是能让这些灯有序地亮起来,那应该更有趣味了!跟传统的一样,逻辑上做成一个流水灯的样式, ...
- 2048聚合版开源代码,cocos2d-js编写,基于CocosEditor开发工具,可运行Android,ios,html5等
1. [代码][JavaScript]代码 /** * @GameName : * 2048 * * @DevelopTool: * Cocos2d-x Editor (CocosEd ...
- 基于MFC对话框的2048游戏
在之前一篇<简单数字拼板游戏学习>基础上修改,地址:http://www.cnblogs.com/fwst/p/3706483.html 开发环境:Windows 7/ Visual St ...
随机推荐
- 初识Docker和Windows Server容器
概览 伴随着Windows Server 2016 Technical Preview 3 (TP3)版本的发布,微软首次提供了Windows平台下地原生容器.它集成了Docker对Windows S ...
- context元素大概解说
Context元素代表一个web应用,运行在某个特定的虚拟主机上.如Servlet Specification 2.2或以后版本中描述的那样,每个web应用基于一个Web Application Ar ...
- 在MySQL向表中插入中文时,出现:incorrect string value 错误
在MySQL向表中插入中文时,出现:incorrect string value 错误,是由于字符集不支持中文.解决办法是将字符集改为GBK,或UTF-8. 一.修改数据库的默认字符集 ...
- postgresql:pgadmin函数调试工具安装过程
通过安装第三方插件pldebugger,可实现在pgadmin客户端对函数设置断点.调试,具体过程如下: 1.下载pldebugger安装包:http://git.postgresql.org/git ...
- ROS 5.x自动定时备份并发送到邮箱(实用)
博主使用ROS已经有很长一段时间了,但经常会忘记备份配置与数据库,加上ROS本身自带的User-Man数据库并不是非常稳定,1年中总会出现1-2次数据丢失的情况.所以费了一定功夫才找到真正可用自动备份 ...
- APP常用字体
font-family:Microsoft YaHei,Helvitica,Verdana,Tohoma,Arial,san-serif;
- 常见HTTP状态码列表
HTTP状态码 当浏览者访问一个网页时,浏览者的浏览器会向网页所在服务器发出请求.当浏览器接收并显示网页前,此网页所在的服务器会返回一个包含HTTP状态码的信息头(server header)用以响应 ...
- MFC在关闭第二个窗口时关闭主对话框
AfxGetApp()->m_pMainWnd->SendMessage(WM_CLOSE);//关闭主对话框
- Android中的动画机制
1 逐帧动画 逐帧动画 就是一系列的图片按照一定的顺序展示的过程. 逐帧动画很简单, 只需要在drawable中或者anim中定义一个Animation-list 其中包含多个it ...
- webApi 数据绑定 获取
直接上代码: <html> <head> <meta name="viewport" content="width=device-width ...