整天待在机房是不是,一直保持学术的态度就比较的难啊~

所以本蒟蒻就在学术之余学了些奇技淫巧,然后就写了一些奇奇怪怪的程序啊,比如让我们小组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();
}

上面提到的图片??
其实你们可以自己找哦~~
上面是2048的每个数字~~下面的是显示高分的数字。。看你们的心情咯~~

【颓废篇】easyx--2048的更多相关文章

  1. 【颓废篇】Py:从零开始的poj自动提交

    之前学习了一些python的爬虫技术... 已经可以通过python来水blog的阅读量了 你知道的太多了, 然而你看我这个blog惨不忍睹的访问量, 有人吗? 有人吗? 今天突然又双叒叕心血来潮想写 ...

  2. 【颓废篇】人生苦短,我用python(一)

    谁渴望来一场华(ang)丽(zang)的python交易! 最近突然产生了系统学习python的想法. 其实自从上次luogu冬日绘板dalao们都在写脚本就有这种想法了. 最近被计算几何势力干翻的我 ...

  3. 【颓废篇】人生苦短, 我用python(二)

    当时产生学习python的欲望便是在看dalao们写脚本的时候… 虽然dalao们好像用的是js来着.. 不过现在好像很多爬虫也可以用python写啊… 所以学python没什么不妥. 而且csdn整 ...

  4. 【游戏】2048及各种变种大集合汇总【更新ing~新版Floppy2048 - 恒星聚变版 - 恶搞改数据】

    threes - 鼻祖 手机版:http://asherv.com/threes/ js版:http://threesjs.com/ 2048 - 原版 http://gabrielecirulli. ...

  5. 2048小游戏代码解析 C语言版

    2048小游戏,也算是风靡一时的益智游戏.其背后实现的逻辑比较简单,代码量不算多,而且趣味性强,适合作为有语言基础的童鞋来加强编程训练.本篇分析2048小游戏的C语言实现代码. 前言 游戏截图:  游 ...

  6. python学习笔记(四) 思考和准备

    一.zip的坑 zip()函数接收多个可迭代数列,将数列中的元素重新组合,在3.0中返回迭代器指向 数列首地址,在3.0以下版本返回List类型的列表数列.我用的是3.5版本python, 所以zip ...

  7. TGL站长关于常见问题的回复

    问题地址: http://www.thegrouplet.com/thread-112923-1-1.html 问题: 网站配有太多的模板是否影响网站加载速度 月光答复: wp不需要删除其他的模板,不 ...

  8. cocos2d-x 3.2 之 2048 —— 第二篇

    ***************************************转载请注明出处:http://blog.csdn.net/lttree************************** ...

  9. cocos2d-x 3.2 之 2048 —— 第五篇

    ***************************************转载请注明出处:http://blog.csdn.net/lttree************************** ...

随机推荐

  1. hive中的lateral view 与 explode函数的使用

    hive中的lateral view 与 explode函数的使用 背景介绍: explode与lateral view在关系型数据库中本身是不该出现的. 因为他的出现本身就是在操作不满足第一范式的数 ...

  2. csp-s模拟测试99

    csp-s模拟测试99 九九归一直接爆炸. $T1$一眼板子. $T2$一眼语文题(语文的唯一一次$120+$是给模拟出来的可知我的语文能力). $T3$一眼普及题. ?? Hours Later 板 ...

  3. nginx中reuqest_uri与uri的区别说明

    reuqest_uri:即客户端发送来的原生请求URI,包括请求参数 uri:请求URI,不包括任何请求参数 举例说明: 1.比如客户端以 get 方式请求 /admin 页面,并且带 id 和 na ...

  4. [转] boost undefined reference to 'pthread_create 问题

    由于是Linux新手,所以现在才开始接触线程编程,照着GUN/Linux编程指南中的一个例子输入编译,结果出现如下错误:undefined reference to 'pthread_create'u ...

  5. 剑指offer——26树的子结构

    题目描述 输入两棵二叉树A,B,判断B是不是A的子结构.(ps:我们约定空树不是任意一个树的子结构)   题解: 注意,所谓的子结构,是树的形状和值相同,并非判断B是不是A的一部分[如果是这样,那就是 ...

  6. 什么是css块级元素和内联元素

    CSS文档流与块级元素(block).内联元素(inline),文档流这个概念理解了它,一堆CSS布局的理论都 变得易于理解,并且体会到CSS这套设计的合理性所在. 文档流 将窗体自上而下分成一行行, ...

  7. Zookeeper怎么实现分布式锁?

    对访问资源 R1 的过程加锁,在操作 O1 结束对资源 R1 访问前,其他操作不允许访问资源 R1.以上算是对独占锁的简单定义了,那么这段定义在 Zookeeper 的"类 Unix/Lin ...

  8. <后端>Flask框架

    1.Flask框架安装 简介:轻量级WEB框架,类似于简单版本的Django pip install flask 环境文件生成 pip freeze > requirement.txt 环境文件 ...

  9. 搭建jeecg-boot项目运行

    实验版本: 2.0.2(发布日期:20190708) 项目地址:https://github.com/zhangdaiscott/jeecg-boot 说明文档:http://jeecg-boot.m ...

  10. 生产环境Docker部署ELK跨区访问kafka不通问题的解决

    由于分布式系统的日志集中采集的需求非常强烈,我们组通过调研和实践搭建了一套基于Docker的日志收集系统Amethyst. 我们首先在测试环境搭建了一套基于Docker swarm集群的ELK分布式环 ...