欧美bbbwbbbw肥妇,免费乱码人妻系列日韩,一级黄片

C++基于EasyX庫實現(xiàn)拼圖小游戲

 更新時間:2021年07月23日 08:37:27   作者:好吃的秋梨膏  
這篇文章主要為大家詳細介紹了C++基于EasyX庫實現(xiàn)拼圖小游戲,文中示例代碼介紹的非常詳細,具有一定的參考價值,感興趣的小伙伴們可以參考一下

用C++的EasyX庫做的拼圖小游戲,供大家參考,具體內(nèi)容如下  

記錄一下自己做的第一個項目,還有一些改進空間QWQ,可以支持難度升級,但是通關判斷似乎有點小問題肯定不是我菜通不了關 。

#pragma once
#include <iostream>
#include <graphics.h>
#include <Windows.h>
#include <algorithm>
#include <easyx.h>
#include <cstdlib>
#include <random>
#include <cmath>
using namespace std;

static const int MAX_MAP = 30;     //定義最大行或者列分塊常量
int check[MAX_MAP][MAX_MAP];     //檢查數(shù)組
int map[MAX_MAP][MAX_MAP];      //序號儲存
int random[MAX_MAP * MAX_MAP];     //隨機化數(shù)組
IMAGE img_total;        //原圖片
IMAGE img_blank;        //白底
IMAGE img[MAX_MAP][MAX_MAP];     //儲存分塊圖片

int level = 3;         //關卡難度
int width_temp = 0;        //分塊寬度
int height_temp = 0;       //分塊高度
int flagi = 0;         //標記塊行位置
int flagj = 0;         //標記塊列位置
int mousei = 0;         //標記鼠標位置
int mousej = 0;         //標記鼠標位置
int FLAG = 0;         //勝利標記

void Get_graphics();       //讀取圖片并預載到原圖中
void Set_graphics();       //設置好圖片位置及對應關系
void Line_flush();        //畫線條分割圖片
void Rand_array();        //初始化隨機數(shù)組
void Get_mouse();        //獲取鼠標操作
void Judge_graphics();       //判定是否通關并選擇是否下一關
void Show_graphics();       //顯示分塊圖片

inline void Get_graphics()      //讀取圖片并預載到原圖中
{
 loadimage(&img_total, L"1.png");
 loadimage(&img_blank, L"0.png");
 initgraph(img_total.getwidth(), img_total.getheight());
}

inline void Set_graphics()      //設置好圖片位置及對應關系
{
 width_temp = img_total.getwidth() / level;
 height_temp = img_total.getheight() / level;
 //載入各分塊的圖片
 SetWorkingImage(&img_total);
 for (int i = 0; i < level; i++)
 {
  for (int j = 0; j < level; j++)
   getimage(&img[i][j], i * width_temp, j * height_temp, width_temp, height_temp);
 }
 SetWorkingImage();
 //校驗數(shù)組初始化
 int cnt = 0;
 for (int i = 0; i < level; i++)
 {
  for (int j = 0; j < level; j++)
  {
   check[i][j] = cnt;
   cnt++;
  }
 }
}

inline void Line_flush()        //畫線條分割圖片
{
 for (int i = 0; i < level; i++)
 {
  //setlinecolor(RED);   //可以更改線條顏色 默認白色
  line(i * width_temp, 0, i * width_temp, img_total.getheight());
  line(0, i * height_temp, img_total.getwidth(), i * height_temp);
 }
}

inline void Rand_array()        //初始化隨機數(shù)組
{
 for (int i = 0; i < level * level; i++)
  random[i] = i;

 random_device rd;
 mt19937 g(rd());         // 隨機數(shù)引擎
 shuffle(random, random + level * level, g);   // 打亂順序

 int cnt = 0;
 for (int i = 0; i < level; i++)
 {
  for (int j = 0; j < level; j++)
  {
   map[j][i] = random[cnt];     //逆轉賦值1
   cnt++;
  }
 }
}

void Get_mouse()
{
 MOUSEMSG msg = GetMouseMsg();
 if (msg.uMsg == WM_LBUTTONDOWN)
 {
  mousei = msg.x / width_temp;
  mousej = msg.y / height_temp;
  if ((mousei + 1 == flagi && mousej == flagj) ||
   (mousei == flagi && mousej + 1 == flagj) ||
   (mousei - 1 == flagi && mousej == flagj) ||
   (mousei == flagi && mousej - 1 == flagj))
  {
   //交換圖片分塊
   swap(map[mousej][mousei], map[flagj][flagi]);
  }
 }
}

void Judge_graphics()
{
 int cnt = 0;
 for (int i = 0; i < level; i++)
 {
  for (int j = 0; j < level; j++)
  {
   if (map[i][j] == check[i][j])
    cnt++;
  }
 }
 if (cnt == level * level)
 {
  MessageBox(GetHWnd(), _T("過關了."), _T("消息提示."), MB_OK);
  FLAG = 1;
  exit(0);
 }
}

inline void Show_graphics()         //顯示分塊圖片
{
 for (int i = 0; i < level; i++)
 {
  for (int j = 0; j < level; j++)
  {
   if (map[j][i] == level * level - 1)    //逆轉賦值2
   {
    flagi = i;
    flagj = j;
    putimage(i * width_temp, j * height_temp, &img_blank);
   }
   else
   {
    int countj = map[j][i] % level;
    int counti = map[j][i] / level;
    putimage(i * width_temp, j * height_temp, &img[countj][counti]);
   }
  }
 }
 Line_flush();
}

int main()
{
 Get_graphics();
 Set_graphics();
 Rand_array();
 Show_graphics();

 while (1)
 {
  BeginBatchDraw();   //雙緩沖防止閃爍
  Get_mouse();
  Show_graphics();
  EndBatchDraw();    //雙緩沖防止閃爍
  Judge_graphics(); 
 }

 if (FLAG)
 {
  putimage(0, 0, &img_total);
  FLAG = 0;
 }

 system("pause");
 return 0;
}

以上就是本文的全部內(nèi)容,希望對大家的學習有所幫助,也希望大家多多支持腳本之家。

相關文章

  • C語言中關于庫函數(shù) qsort 的模擬實現(xiàn)過程

    C語言中關于庫函數(shù) qsort 的模擬實現(xiàn)過程

    庫函數(shù)的模擬實現(xiàn)有利于我們?nèi)ド钊肓私膺@個函數(shù)內(nèi)部是怎樣實現(xiàn)的,以及學習它的算法,使我們更加了解這個函數(shù)該怎樣去使用,接下來我將詳細的介紹qsort的應用及用法,并且用代碼模擬實現(xiàn)它們的功能
    2021-09-09
  • VS2019配置opencv詳細圖文教程和測試代碼的實現(xiàn)

    VS2019配置opencv詳細圖文教程和測試代碼的實現(xiàn)

    這篇文章主要介紹了VS2019配置opencv詳細圖文教程和測試代碼的實現(xiàn),文中通過示例代碼介紹的非常詳細,對大家的學習或者工作具有一定的參考學習價值,需要的朋友們下面隨著小編來一起學習學習吧
    2020-04-04
  • C語言數(shù)據(jù)結構之線性表的鏈式存儲結構

    C語言數(shù)據(jù)結構之線性表的鏈式存儲結構

    線性表是最基本、最簡單、也是最常用的一種數(shù)據(jù)結構。線性表(linear list)是數(shù)據(jù)結構的一種,一個線性表是n個具有相同特性的數(shù)據(jù)元素的有限序列,這篇文章帶你學習下線性表的鏈式存儲結構
    2021-11-11
  • Qt使用SQLite數(shù)據(jù)庫實現(xiàn)數(shù)據(jù)增刪改查

    Qt使用SQLite數(shù)據(jù)庫實現(xiàn)數(shù)據(jù)增刪改查

    這篇文章主要為大家詳細介紹了Qt如何使用SQLite數(shù)據(jù)庫實現(xiàn)數(shù)據(jù)增刪改查功能,文中的示例代碼講解詳細,感興趣的小伙伴可以跟隨小編一起了解一下
    2023-06-06
  • C++ 函數(shù)模板和類模板詳情

    C++ 函數(shù)模板和類模板詳情

    這篇文章主要對C++ 函數(shù)模板和類模板的相關資料的詳細介紹,需要的朋友可以參考下面文章的具體內(nèi)容
    2021-09-09
  • C語言棧的表示與實現(xiàn)實例詳解

    C語言棧的表示與實現(xiàn)實例詳解

    這篇文章主要介紹了C語言棧的表示與實現(xiàn),對于數(shù)據(jù)結構與算法的研究有一定的借鑒價值,需要的朋友可以參考下
    2014-07-07
  • C語言中字符串處理函數(shù)sscanf的用法

    C語言中字符串處理函數(shù)sscanf的用法

    一直對于一些日期字符串中數(shù)字的提取比較頭疼,現(xiàn)看到 sscanf 對于字符串中的內(nèi)容提取較方便,本文主要介紹了C語言中字符串處理函數(shù)sscanf的用法,具有一定參考價值,感興趣的可以了解一下
    2023-08-08
  • C語言實現(xiàn)24點游戲源代碼

    C語言實現(xiàn)24點游戲源代碼

    這篇文章主要為大家詳細介紹了C語言實現(xiàn)24點游戲源代碼,文中示例代碼介紹的非常詳細,具有一定的參考價值,感興趣的小伙伴們可以參考一下
    2019-10-10
  • C++實現(xiàn)動態(tài)煙花代碼

    C++實現(xiàn)動態(tài)煙花代碼

    這篇文章主要介紹了利用C++實現(xiàn)的放煙花程序,用到了EGE圖形庫,文中的示例代碼講解詳細,對我們學習C++有一定幫助,需要的可以參考一下
    2023-01-01
  • c++ 指針與引用的區(qū)別介紹及使用說明

    c++ 指針與引用的區(qū)別介紹及使用說明

    指針與引用看上去完全不同(指針用操作符*和->,引用使用操作符.),但是它們似乎有相同的功能,感興趣的朋友可以了解下啊,或許本文對你有所幫助,好了,話不多說,切入正題
    2013-01-01

最新評論