【颓废篇】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(); } 
            
           
          
         
       
      
      
     
     
    
    
   
   

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


  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 2
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值