C++EasyX 라 이브 러 리 기반 퍼 즐 게임

5160 단어 C++퍼 즐
C++의 EasyX 라 이브 러 리 로 만 든 퍼 즐 게임 을 참고 하 시기 바 랍 니 다.구체 적 인 내용 은 다음 과 같 습 니 다.
자신 이 만 든 첫 번 째 프로젝트 를 기록 하고 개선 공간 인 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];     //    
int map[MAX_MAP][MAX_MAP];      //    
int random[MAX_MAP * MAX_MAP];     //     
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();        //       
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();
 //       
 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()        //       
{
 for (int i = 0; i < level * level; i++)
  random[i] = i;

 random_device rd;
 mt19937 g(rd());         //      
 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;
}
이상 이 바로 본 고의 모든 내용 입 니 다.여러분 의 학습 에 도움 이 되 고 저 희 를 많이 응원 해 주 셨 으 면 좋 겠 습 니 다.

좋은 웹페이지 즐겨찾기