【颓废篇】easyx--2048
整天待在机房是不是,一直保持学术的态度就比较的难啊~
所以本蒟蒻就在学术之余学了些奇技淫巧,然后就写了一些奇奇怪怪的程序啊,比如让我们小组dalao们都颓得不亦乐乎的2048~~
当然,2048的实现还是非常简单的对不对,我的写法估计更麻烦,我相信会有更方便的方式实现。。。
当然了,OI界学习的信息组dalao们写的程序多半是Console Application啊,就一个黑洞洞的窗口,画个图只能是字符画,看上去会很无聊,缺少图形的界面,于是,本蒟蒻学习了一种奇妙的东西——easyx
当然了,这种有趣的东西机房弱爆了的DEV C++是不滋磁的啊,所以本蒟蒻又引进了一个非常强大的IDE啊,Visual Studio。。
这个东西非常的强大,当然平时写写Console的我等是体会不到它的高端的,每写一个程序还要建一个项目,就显得特别蠢~~
但是,真正建个什么颓废的项目的时候,VS的强大就体现了。。。
//我是不是扯淡太多了
终于,今天下午能愉快的放假回家了,就在这里贴一贴代码啊~
开发环境:vs2015Professional 语言:C/C++
//2048 源码
#pragma once #include
#include
#include
#include
#include
#include
#include
#include
#include const COLORREF bkcolor = 0xFFF070;
const COLORREF cmdcolor = 0xFFA080;
const COLORREF emptycolor = 0xE0F0FF;
const COLORREF scorecolor = 0xE0F0FF; const int wndWidth = 470;
const int wndHeight = 640;
const int PicWidth = 100; const int PicX[4] = { 20,130,240,350 };
const int PicY[4] = { 190,300,410,520 }; const int Point[11] = { 2,4,8,16,32,64,128,256,512,1024,2048 }; #define t_srand srand((unsigned)time(NULL))
#define my_rand ((rand()|rand()<<16)%1000000007) IMAGE image[12];
IMAGE number[10]; int board[4][4] = { {0,0,0,0},{0,0,0,0},{0,0,0,0},{0,0,0,0} }; BOOL play[4][4]; BOOL End = FALSE;
int total = 0;
int record = 0; const char* FILENAME = "Image\\010.bmp"; //Function.h
#pragma once #include "Preparation.h" void Game_Init();
void Load_Image();
int Get_Highest();
void Load_Highest();
void New_Number();
void Msg_React();
void Move_Up();
void Move_Down();
void Move_Left();
void Move_Right();
void Put_Number(int, BOOL); void Game_Init()
{
Load_Image();
record=Get_Highest(); initgraph(wndWidth, wndHeight);
setbkcolor(bkcolor);
cleardevice();
setfillcolor(cmdcolor);
fillrectangle(-1, -1, wndWidth + 1, 171);
setfillcolor(emptycolor);
for (int i = 0; i < 4; i++)
{
for (int j = 0; j < 4; j++)
fillrectangle(PicX[i], PicY[j], PicX[i] + PicWidth, PicY[j] + PicWidth);
}
fillrectangle(wndWidth - 180, 40, wndWidth - 20, 80);
fillrectangle(wndWidth - 180, 90, wndWidth - 20, 130);
Put_Number(record, 1);
Put_Number(0, 0);
New_Number();
New_Number();
} void Load_Image() //A AA
{
loadimage(&image[1], _T("Image\\2.bmp"), PicWidth, PicWidth);
loadimage(&image[2], _T("Image\\4.bmp"), PicWidth, PicWidth);
loadimage(&image[3], _T("Image\\8.bmp"), PicWidth, PicWidth);
loadimage(&image[4], _T("Image\\16.bmp"), PicWidth, PicWidth);
loadimage(&image[5], _T("Image\\32.bmp"), PicWidth, PicWidth);
loadimage(&image[6], _T("Image\\64.bmp"), PicWidth, PicWidth);
loadimage(&image[7], _T("Image\\128.bmp"), PicWidth, PicWidth);
loadimage(&image[8], _T("Image\\256.bmp"), PicWidth, PicWidth);
loadimage(&image[9], _T("Image\\512.bmp"), PicWidth, PicWidth);
loadimage(&image[10], _T("Image\\1024.bmp"), PicWidth, PicWidth);
loadimage(&image[11], _T("Image\\2048.bmp"), PicWidth, PicWidth); loadimage(&number[0], _T("Image\\000.bmp"), 20, 40);
loadimage(&number[1], _T("Image\\001.bmp"), 20, 40);
loadimage(&number[2], _T("Image\\002.bmp"), 20, 40);
loadimage(&number[3], _T("Image\\003.bmp"), 20, 40);
loadimage(&number[4], _T("Image\\004.bmp"), 20, 40);
loadimage(&number[5], _T("Image\\005.bmp"), 20, 40);
loadimage(&number[6], _T("Image\\006.bmp"), 20, 40);
loadimage(&number[7], _T("Image\\007.bmp"), 20, 40);
loadimage(&number[8], _T("Image\\008.bmp"), 20, 40);
loadimage(&number[9], _T("Image\\009.bmp"), 20, 40);
} int Get_Highest()
{
using namespace std;
fstream gamefile;
int game_point;
gamefile.open(FILENAME, ios::in);
if (!gamefile)
{
gamefile.open(FILENAME, ios::out);
gamefile << 0;
return 0;
}
gamefile >> game_point;
if (game_point > 100000000 || game_point % 4)
return 0;
return game_point;
} void Load_Highest()
{
if (total < record)
return;
using namespace std;
fstream gamefile;
gamefile.open(FILENAME, ios::out);
gamefile << total;
record = total;
Put_Number(total, 1);
} void New_Number()
{ if (End) return;
t_srand;
int type = abs(my_rand) % 10;
int Number = 0;
int NumberX = 4, NumberY = 4; if (type < 7)
Number = 1;
else
Number = 2; do
{
NumberX = abs(my_rand) % 4;
NumberY = abs(my_rand) % 4;
type++;
} while (board[NumberX][NumberY]); board[NumberX][NumberY] = Number; BeginBatchDraw();
putimage(PicX[NumberY], PicY[NumberX], &image[Number]);
EndBatchDraw();
} void Msg_React()
{
if (End) return;
int k1 = _getch();
int k2 = 0;
switch (k1)
{
case 224:
k2 = _getch();
switch (k2)
{
case 72:
Move_Up();
break;
case 80:
Move_Down();
break;
case 75:
Move_Left();
break;
case 77:
Move_Right();
default:
break;
}
break;
case 87:
case 119:
Move_Up();
break;
case 83:
case 115:
Move_Down();
break;
case 65:
case 97:
Move_Left();
break;
case 68:
case 100:
Move_Right();
break;
default:
break;
}
Load_Highest();
} void Move_Up()
{
for (int i = 0; i < 4; i++)
for (int j = 0; j < 4; j++)
play[i][j] = FALSE;
BOOL flag = FALSE;
for (int i = 0; i < 4; i++)
{
for (int j = 0; j < 4; j++)
{
if (!board[i][j]) continue;
int find = i - 1;
int data = board[i][j];
while (find >= 0)
{
if (!board[find][j])
{
board[find][j] = board[find + 1][j];
board[find + 1][j] = 0;
flag = TRUE;
find--;
}
else if (board[find][j] == data && !play[find][j])
{
board[find][j] = data + 1;
total += Point[data];
board[find + 1][j] = 0;
play[find][j] = true;
flag = TRUE;
find--;
}
else find = -1;
}
}
}
BeginBatchDraw();
int Empty_Count = 0;
for (int i = 0; i < 4; i++)
{
for (int j = 0; j < 4; j++)
{
if (board[i][j])
{
putimage(PicX[j], PicY[i], &image[board[i][j]]);
}
else
{
fillrectangle(PicX[j], PicY[i], PicX[j] + PicWidth, PicY[i] + PicWidth);
Empty_Count++;
}
}
}
Put_Number(total, 0);
EndBatchDraw();
if (!Empty_Count)
{
End = TRUE;
return;
}
if (flag)
New_Number();
} void Move_Down()
{
for (int i = 0; i < 4; i++)
for (int j = 0; j < 4; j++)
play[i][j] = FALSE;
BOOL flag = FALSE;
for (int i = 2; i >= 0; i--)
{
for (int j = 0; j < 4; j++)
{
if (!board[i][j]) continue;
int find = i + 1;
int data = board[i][j];
while (find <= 3)
{
if (!board[find][j])
{
board[find][j] = board[find - 1][j];
board[find - 1][j] = 0;
flag = TRUE;
find++;
}
else if (board[find][j] == data && !play[find][j])
{
board[find][j] = data + 1;
total += Point[data];
board[find - 1][j] = 0;
play[find][j] = true;
flag = TRUE;
find++;
}
else find = 4;
}
}
}
BeginBatchDraw();
int Empty_Count = 0;
for (int i = 0; i < 4; i++)
{
for (int j = 0; j < 4; j++)
{
if (board[i][j])
{
putimage(PicX[j], PicY[i], &image[board[i][j]]);
}
else
{
fillrectangle(PicX[j], PicY[i], PicX[j] + PicWidth, PicY[i] + PicWidth);
Empty_Count++;
}
}
}
Put_Number(total, 0);
EndBatchDraw();
if (!Empty_Count)
{
End = TRUE;
return;
}
if (flag)
New_Number();
} void Move_Left()
{
for (int i = 0; i < 4; i++)
for (int j = 0; j < 4; j++)
play[i][j] = FALSE;
BOOL flag = FALSE;
for (int j = 1; j < 4; j++)
{
for (int i = 0; i < 4; i++)
{
if (!board[i][j]) continue;
int find = j - 1;
int data = board[i][j];
while (find >= 0)
{
if (!board[i][find])
{
board[i][find] = board[i][find + 1];
board[i][find + 1] = 0;
flag = TRUE;
find--;
}
else if (board[i][find] == data)
{
board[i][find] = data + 1;
total += Point[data];
board[i][find + 1] = 0;
play[i][find] = TRUE;
flag = TRUE;
find--;
}
else find = -1;
}
}
}
BeginBatchDraw();
int Empty_Count = 0;
for (int i = 0; i < 4; i++)
{
for (int j = 0; j < 4; j++)
{
if (board[i][j])
{
putimage(PicX[j], PicY[i], &image[board[i][j]]);
}
else
{
fillrectangle(PicX[j], PicY[i], PicX[j] + PicWidth, PicY[i] + PicWidth);
Empty_Count++;
}
}
}
Put_Number(total, 0);
EndBatchDraw();
if (!Empty_Count)
{
End = TRUE;
return;
}
if (flag)
New_Number();
} void Move_Right()
{
for (int i = 0; i < 4; i++)
for (int j = 0; j < 4; j++)
play[i][j] = FALSE;
BOOL flag = FALSE;
for (int j = 2; j >= 0; j--)
{
for (int i = 0; i < 4; i++)
{
if (!board[i][j]) continue;
int find = j + 1;
int data = board[i][j];
while (find <= 3)
{
if (!board[i][find])
{
board[i][find] = board[i][find - 1];
board[i][find - 1] = 0;
flag = TRUE;
find++;
}
else if (board[i][find] == data && !play[i][find])
{
board[i][find] = data + 1;
total += Point[data];
board[i][find - 1] = 0;
play[i][find] = TRUE;
flag = TRUE;
find++;
}
else find = 4;
}
}
}
BeginBatchDraw();
int Empty_Count = 0;
for (int i = 0; i < 4; i++)
{
for (int j = 0; j < 4; j++)
{
if (board[i][j])
{
putimage(PicX[j], PicY[i], &image[board[i][j]]);
}
else
{
fillrectangle(PicX[j], PicY[i], PicX[j] + PicWidth, PicY[i] + PicWidth);
Empty_Count++;
}
}
}
Put_Number(total, 0);
EndBatchDraw();
if (!Empty_Count)
{
End = TRUE;
return;
}
if (flag)
New_Number();
} void Put_Number(int NUMBER,BOOL flag)
{
if (flag)
{
for (int i = 1; i <= 8; i++)
{
putimage(wndWidth - (20 + 20 * i), 40, &number[NUMBER % 10]);
NUMBER /= 10;
}
}
else
{
for (int i = 1; i <= 8; i++)
{
putimage(wndWidth - (20 + 20 * i), 90, &number[NUMBER % 10]);
NUMBER /= 10;
}
}
} //main.cpp
#include "Preparation.h"
#include "function.h" void main()
{
Game_Init();
while (!End)
{
Msg_React();
}
Sleep(500);
closegraph();
}
【颓废篇】easyx--2048的更多相关文章
- 【颓废篇】Py:从零开始的poj自动提交
之前学习了一些python的爬虫技术... 已经可以通过python来水blog的阅读量了 你知道的太多了, 然而你看我这个blog惨不忍睹的访问量, 有人吗? 有人吗? 今天突然又双叒叕心血来潮想写 ...
- 【颓废篇】人生苦短,我用python(一)
谁渴望来一场华(ang)丽(zang)的python交易! 最近突然产生了系统学习python的想法. 其实自从上次luogu冬日绘板dalao们都在写脚本就有这种想法了. 最近被计算几何势力干翻的我 ...
- 【颓废篇】人生苦短, 我用python(二)
当时产生学习python的欲望便是在看dalao们写脚本的时候… 虽然dalao们好像用的是js来着.. 不过现在好像很多爬虫也可以用python写啊… 所以学python没什么不妥. 而且csdn整 ...
- 【游戏】2048及各种变种大集合汇总【更新ing~新版Floppy2048 - 恒星聚变版 - 恶搞改数据】
threes - 鼻祖 手机版:http://asherv.com/threes/ js版:http://threesjs.com/ 2048 - 原版 http://gabrielecirulli. ...
- 2048小游戏代码解析 C语言版
2048小游戏,也算是风靡一时的益智游戏.其背后实现的逻辑比较简单,代码量不算多,而且趣味性强,适合作为有语言基础的童鞋来加强编程训练.本篇分析2048小游戏的C语言实现代码. 前言 游戏截图: 游 ...
- python学习笔记(四) 思考和准备
一.zip的坑 zip()函数接收多个可迭代数列,将数列中的元素重新组合,在3.0中返回迭代器指向 数列首地址,在3.0以下版本返回List类型的列表数列.我用的是3.5版本python, 所以zip ...
- TGL站长关于常见问题的回复
问题地址: http://www.thegrouplet.com/thread-112923-1-1.html 问题: 网站配有太多的模板是否影响网站加载速度 月光答复: wp不需要删除其他的模板,不 ...
- cocos2d-x 3.2 之 2048 —— 第二篇
***************************************转载请注明出处:http://blog.csdn.net/lttree************************** ...
- cocos2d-x 3.2 之 2048 —— 第五篇
***************************************转载请注明出处:http://blog.csdn.net/lttree************************** ...
随机推荐
- NOIp2018集训test-10-15 (bike day1)
B 君的第一题 求斐波那契数列模n的循环节. 1.暴力bsgs,毕姥爷好像说循环节最大是6*n还是多少的,反之比较小,直接bsgs这题是可以过的.但是我非常蠢重载运算符的时候把相等返回成了小于,然后根 ...
- 安装zabbix需求环境
yum install gcc gcc-c++ make mysql-server mysql-devel libcurl-devel net-snmp-devel php php-ldap php- ...
- (转)C++实现RTMP协议发送H.264编码及AAC编码的音视频,摄像头直播
转:http://www.cnblogs.com/haibindev/archive/2011/12/29/2305712.html C++实现RTMP协议发送H.264编码及AAC编码的音视频 RT ...
- 报错:[Vue warn]: Avoid mutating a prop directly since the value will be overwritten whenever the paren
今天在做Vue的时候,子组件关闭的时候,报如下错误 报错:vue.esm.js?65d7:610 [Vue warn]: Avoid mutating a prop directly since th ...
- LeetCode 595. Big Countries (大的国家)
题目标签: 题目给了我们一个 world table,让我们找出 面积大于3 million square km 或者 人口大于 25 million. 直接用两个条件搜索. Java Solutio ...
- web应用本质
web应用的本质 在之前学习的socket网络编程中,是基于: 架构:C/S架构 协议:TCP/UDP协议 运行在OSI七层模型中的传输层 那么在web应用中,是基于: 架构:B/S架构 协议:Htt ...
- Day 11:函数装饰器
在说装饰器前,先说一个东西,再Python里,有一个 一切皆对象,一切皆变量. 例: def hello(name="sunjinyao"): return "hi &q ...
- python 17 异常
自 http://www.cnblogs.com/BeginMan/p/3171445.html 一.什么是错误,什么是异常,它们两者区别 这里解释如下:个人觉得很通俗易懂 错误是指在执行代码过程中发 ...
- scrapy的使用-scrapy shell
进入 该目录下执行scrapy shell 文件, 在命令行可执行该文件中链接的xpath语法,和BeautifulSoup语法.
- linux 下安装maven私服
1.下载最新nexus安装包 下载地址:https://www.sonatype.com/download-oss-sonatype 2.下载JDK7,nexus2版本支持JDK7:nexus1版本支 ...