推箱子小游戏(c++实现)

简介: 推箱子小游戏(c++实现)

项目实现准备工作:

1.安装easyX,vs2010版本。

以下是自己写的代码


源代码:

#include <iostream>
#include <Windows.h>
#include <string>
#include <graphics.h>
#include <conio.h>
#include "box_man.h"
IMAGE img_res[ALL];
void changeMap(struct _POS *next_POS,enum _POR prop)
{
  map[next_POS->x][next_POS->y]=prop;
  putimage(next_POS->y*RATIO+Shift_X,next_POS->x*RATIO+Shift_Y,&img_res[prop]);
}
void gameCotrol(enum _DIRECT direct)
{
  struct _POS next_pos=man;
  struct _POS next_next_pos=man;
  switch(direct)
  {
    case UP:
      next_pos.x--;
      next_next_pos.x-=2;
      break;
    case DOWN:
      next_pos.x++;
      next_next_pos.x+=2;
      break;
    case LEFT:
      next_pos.y--;
      next_next_pos.y-=2;
      break;
    case RIGHT:
      next_pos.y++;
      next_next_pos.y+=2;
      break;
  }
   if(isValid(next_pos)&&map[next_pos.x][next_pos.y]==FLOOR)
  {
    changeMap(&next_pos,MAN);
    changeMap(&man,FLOOR);
    man=next_pos;
  }else if(isValid(next_pos)&&map[next_pos.x][next_pos.y]==BOX)
  {
    if(map[next_next_pos.x][next_next_pos.y]==BOX_DES)
    {
      changeMap(&next_next_pos,HIT);
      changeMap(&next_pos,MAN);
      changeMap(&man,FLOOR);
      man=next_pos;
    }else if(map[next_next_pos.x][next_next_pos.y]==FLOOR)
    {
      changeMap(&next_next_pos,BOX);
      changeMap(&next_pos,MAN);
      changeMap(&man,FLOOR);
      man=next_pos;
    }
  }
}
void gameOver(IMAGE *black_ground)
{
  putimage(0,0,black_ground);
  settextcolor(YELLOW);
  RECT rec={0,0,WEIGHT,HEIGHT};
  settextstyle(20,0,L"宋体");
  drawtext(L"恭喜你通关~\n",&rec,DT_CENTER|DT_VCENTER|DT_SINGLELINE);  //&rec:参照这个矩形,DT_CENTER:水平居中,DT_VCENTER:垂直居中,DT_SINGLELINE:文字显示单行
}
bool isGameOver()
{
  for(int i=0;i<LINE;i++)
  {
    for(int j=0;j<COLUMN;j++)
    {
      if(map[i][j]==BOX_DES)
      {
        return false;
      }
    }
  }
  return true;
}
int main(void)
{
  IMAGE bg_bk;
  initgraph(WEIGHT,HEIGHT);
  loadimage(&bg_bk,L"blackground.bmp",960,768);
  putimage(0,0,&bg_bk);
  loadimage(&img_res[WALL],L"wall.bmp",RATIO,RATIO);
  loadimage(&img_res[FLOOR],L"floor.bmp",RATIO,RATIO);
  loadimage(&img_res[BOX_DES],L"des.bmp",RATIO,RATIO);
  loadimage(&img_res[MAN],L"man.bmp",RATIO,RATIO);
  loadimage(&img_res[BOX],L"box.bmp",RATIO,RATIO);
  loadimage(&img_res[HIT],L"box.bmp",RATIO,RATIO);
  for(int i=0;i<LINE;i++)
  {
    for(int j=0;j<COLUMN;j++)
    {
      if(map[i][j]==MAN)
      {
        man.x=i;
        man.y=j;
      }
    putimage(RATIO*j+Shift_X,RATIO*i+Shift_Y,&img_res[map[i][j]]);
    }
  }
  bool quit=true;
  do
  {
    if(_kbhit())
    {
      char ch=_getch();
      cout<<ch<<endl;
      if(ch==KEY_UP)
      {
        gameCotrol(UP);
      }else if(ch==KEY_DOWN)
      {
        gameCotrol(DOWN);
      }else if(ch==KEY_LEFT)
      {
        gameCotrol(LEFT);
      }else if(ch==KEY_RIGHT)
      {
        gameCotrol(RIGHT);
      }else if(ch==KEY_QUIT)
      {
        quit=false;
      }
    }
    if(isGameOver())
    {
      quit=false;
      gameOver(&bg_bk); //结束场景
    }
    Sleep(100);
  }while(quit==true);
  system("pause");
  closegraph();
  return 0;
}

头文件:

#define LINE 9
#define COLUMN 12
#define RATIO 61
#define WEIGHT 960
#define HEIGHT 768
#define KEY_UP 'w'
#define KEY_DOWN 's'
#define KEY_LEFT 'a'
#define KEY_RIGHT 'd'
#define KEY_QUIT 'q'
#define Shift_X 100
#define Shift_Y 150
#define isValid(pos)  pos.x>=0&&pos.x<LINE&&pos.y>=0&&pos.y<COLUMN
using namespace std;
int map[LINE][COLUMN]={ 
    { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0},
    { 0, 1, 0, 1, 1, 1, 1, 1, 1, 1, 0, 0},
    { 0, 1, 4, 1, 0, 2, 1, 0, 2, 1, 0, 0},
    { 0, 1, 0, 1, 0, 1, 0, 0, 1, 1, 1, 0},
    { 0, 1, 0, 2, 0, 1, 1, 4, 1, 1, 1, 0},
    { 0, 1, 1, 1, 0, 3, 1, 1, 1, 4, 1, 0},
    { 0, 1, 2, 1, 1, 4, 1, 1, 1, 1, 1, 0},
    { 0, 1, 0, 0, 1, 0, 1, 1, 0, 0, 1, 0},
    { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0}};
struct _POS
{
  int x;
  int y;
};
struct _POS man;
enum _DIRECT
{
  UP,
  DOWN,
  LEFT,
  RIGHT
};
enum _POR
{
  WALL,
  FLOOR,
  BOX_DES,
  MAN,
  BOX,
  HIT,
  ALL
};

很简单有趣,初学者可以多试试。

相关文章
|
算法 定位技术 C++
【兔年之兔子走迷宫】 用一个小游戏对回溯法进行实现 | C++
简单的来说,算法就是用计算机程序代码来实现数学思想的一种方法。学习算法就是为了了解它们在计算机中如何演算,以及在当今的信息时代,它们是如何在各个层面上影响我们的日常生活的,从而提高我们的逻辑思维能力和处理实际问题的能力。善用算法、巧用算法,是培养程序设计逻辑的重中之重,许多实际的问题都可用多个可行的算法来解决, 但是要从中找出最优的解决算法却是一项挑战。
567 6
【兔年之兔子走迷宫】 用一个小游戏对回溯法进行实现 | C++
|
人工智能 定位技术 C++
C++实用编程——坦克大战小游戏
我们直接看代码吧,适于win XP和win 7,win 10 画质有些毒瘤 #include <stdio.h> #include <windows.h> #include <time.
23417 0
C++急速赛车小游戏(注释几天后更新)
C++急速赛车小游戏(注释几天后更新)
250 0
【推荐福利】c++使用easyx做出像素鸟,简单上手小游戏
【推荐福利】c++使用easyx做出像素鸟,简单上手小游戏
c++【键盘读入操作】,两种方法做小游戏的控制摇杆
c++【键盘读入操作】,两种方法做小游戏的控制摇杆
c++【键盘读入操作】,两种方法做小游戏的控制摇杆
|
算法 C++
c++编写简易版2048小游戏
c++编写简易版2048小游戏
|
算法 定位技术 C++
用c++写一个的一个推箱子小游戏
用c++写一个的一个推箱子小游戏
用c++写一个的一个推箱子小游戏
c++循环、continue、排序、goto以及猜数字小游戏
c++循环、continue、排序、goto以及猜数字小游戏