找回密码
 立即注册

QQ登录

只需一步,快速开始

搜索
查看: 5441|回复: 0
收起左侧

森林冰火人C++源程序

[复制链接]
ID:652866 发表于 2019-11-30 10:55 | 显示全部楼层 |阅读模式
游戏 森林冰火人c++// SnowBros.cpp: 定义控制台应用程序的入口点。
//
  1. #pragma once
  2. #include "stdafx.h"
  3. #include "Stage.h"
  4. #include "Player.h"
  5. #include "Snowball.h"

  6. IMAGE background_img, title_img, begin_img, game_help_img, move_rule_img;
  7. IMAGE return_img, onemode_img, twomode_img;
  8. int player_cnt = 0;

  9. void ShowMenu()
  10. {
  11.         putimage(0, 0, &background_img);
  12.         putimage(4 * UNIT, UNIT, &title_img);
  13.         putimage(8 * UNIT, 8 * UNIT, &begin_img);
  14.         putimage(8 * UNIT, 10 * UNIT, &game_help_img);
  15. }

  16. void ShowHelp()
  17. {
  18.         putimage(0, 0, &background_img);
  19.         putimage(100, 100, &move_rule_img);
  20.         putimage(22 * UNIT, 0, &return_img);
  21. }

  22. void ShowMode()
  23. {
  24.         putimage(0, 0, &background_img);
  25.         putimage(4 * UNIT, UNIT, &title_img);
  26.         putimage(22 * UNIT, 0, &return_img);
  27.         putimage(10 * UNIT, 9 * UNIT, &onemode_img);
  28.         putimage(10 * UNIT, 11 * UNIT, &twomode_img);
  29. }

  30. bool OkHit(char ch)
  31. {
  32.         if (ch == 'a' || ch == 'd' || ch == 'j' || ch == 'k')
  33.                 return true;
  34.         if (player_cnt == 2)
  35.         {
  36.                 if (ch == 37 || ch == 39 || ch == '1' || ch == '2')
  37.                         return true;
  38.         }
  39.         return false;
  40. }

  41. vector<char> MyKbHit()
  42. {
  43.         vector<char> ret;
  44.         if (GetAsyncKeyState('A') < 0)
  45.                 ret.push_back('a');
  46.         if (GetAsyncKeyState('D') < 0)
  47.                 ret.push_back('d');
  48.         if (GetAsyncKeyState('J') < 0)
  49.                 ret.push_back('j');
  50.         if (GetAsyncKeyState('K') < 0)
  51.                 ret.push_back('k');
  52.         if (GetAsyncKeyState(VK_LEFT) < 0)
  53.                 ret.push_back('<');
  54.         if (GetAsyncKeyState(VK_RIGHT) < 0)
  55.                 ret.push_back('>');
  56.         if (GetAsyncKeyState(VK_NUMPAD2) < 0)
  57.                 ret.push_back('2');
  58.         if (GetAsyncKeyState(VK_NUMPAD3) < 0)
  59.                 ret.push_back('3');
  60.         return ret;
  61. }

  62. extern void LoadMap(Stage &gk);
  63. extern vector<Player> InitPlayer(Stage &gk, int mode);
  64. extern void LoadPlayer(vector<Player> &player);
  65. extern void ControlPlayer(Player &pl, char hit);
  66. extern void SnowBallNewPos(queue<SnowBall> &q);

  67. bool GoGoGo(int level)
  68. {
  69.         Stage gk;
  70.         gk.Init(level);
  71.         vector<Player> player = InitPlayer(gk, player_cnt);
  72.         queue<SnowBall> ball;
  73.         vector<char> hit;
  74.         BeginBatchDraw();
  75.         while (1)
  76.         {
  77.                 LoadMap(gk);
  78.                 LoadPlayer(player);
  79.                 LoadSnowBall(ball);
  80.                 FlushBatchDraw();
  81.                 //LoadBar();
  82.                 //LoadMonster();
  83.                 hit = MyKbHit();
  84.                 if (hit.size())
  85.                 {
  86.                         for (int i = 0; i < hit.size(); i++)
  87.                         {
  88.                                 if (hit[i] == 'a' || hit[i] == 'd' || hit[i] == 'j' || hit[i] == 'k')
  89.                                         ControlPlayer(player[1], hit[i], ball);
  90.                                 else if (player_cnt == 2)
  91.                                 {
  92.                                         if (hit[i] == '<')
  93.                                                 hit[i] = 'a';
  94.                                         else if (hit[i] == '>')
  95.                                                 hit[i] = 'd';
  96.                                         else if (hit[i] == '2')
  97.                                                 hit[i] = 'j';
  98.                                         else if (hit[i] == '3')
  99.                                                 hit[i] = 'k';
  100.                                         ControlPlayer(player[2], hit[i], ball);
  101.                                 }
  102.                         }
  103.                 }
  104.                 for (int i = 1; i < player.size(); i++)
  105.                         PlayerNewPos(player[i], gk);
  106.                 SnowBallNewPos(ball);

  107.                 Sleep(10);
  108.         }
  109.         return 0;
  110. }

  111. void BeginGame()
  112. {
  113.         int level = 1;
  114.         while (level <= 1) //关卡总数
  115.         {
  116.                 if (GoGoGo(level))
  117.                 {
  118.                         level++;
  119.                         continue;
  120.                 }
  121.                 else
  122.                         break;
  123.         }
  124.         if (level == 1) //关卡总数
  125.                 ; //通关
  126.         return;
  127. }

  128. //判断鼠标是否点击到图片上,(left,up)为putimage的左上角
  129. bool ClickOn(MOUSEMSG m, IMAGE a, int left, int up)
  130. {
  131.         int x = m.x, y = m.y;
  132.         int right = left + a.getwidth(), down = up + a.getheight();
  133.         if (left <= x && x <= right && up <= y && y <= down)
  134.                 return true;
  135.         return false;
  136. }

  137. void InitLoadImage()
  138. {
  139.         settextstyle(50, 0, _T("宋体")); //初始化字体
  140.         loadimage(&background_img, _T(".\\img\\background.jpg"));
  141.         loadimage(&title_img, _T(".\\img\\title.bmp"));
  142.         loadimage(&begin_img, _T(".\\img\\begin_game.bmp"));
  143.         loadimage(&game_help_img, _T(".\\img\\game_help.bmp"));
  144.         loadimage(&move_rule_img, _T(".\\img\\move_rule.bmp"));
  145.         loadimage(&return_img, _T(".\\img\\return.jpg"));
  146.         loadimage(&onemode_img, _T(".\\img\\onemode.bmp"));
  147.         loadimage(&twomode_img, _T(".\\img\\twomode.bmp"));
  148. }

  149. int main()
  150. {
  151.         // for debug
  152.         /*
  153.         initgraph(1200, 700);
  154.         wstring s = L"hello world";
  155.         outtext(s.c_str());
  156.         getchar();
  157.         return 0;
  158.         */

  159.         initgraph(1200, 700);        // 创建绘图窗口,大小为 1200*700 像素
  160.         InitLoadImage();
  161.         MOUSEMSG click;
  162.         while (1)
  163.         {
  164.                 ShowMenu();
  165.                 while (1)
  166.                 {
  167.                         click = GetMouseMsg();
  168.                         if (click.mkLButton == true)
  169.                                 break;
  170.                 }
  171.                 if (ClickOn(click, begin_img, 8 * UNIT, 8 * UNIT))
  172.                 {
  173.                         ShowMode(); //选择游戏模式
  174.                         player_cnt = 0;
  175.                         while (1)
  176.                         {
  177.                                 click = GetMouseMsg();
  178.                                 if (click.mkLButton == true)
  179.                                 {
  180.                                         if (ClickOn(click, onemode_img, 10 * UNIT, 9 * UNIT))
  181.                                                 player_cnt = 1;
  182.                                         else if (ClickOn(click, twomode_img, 10 * UNIT, 11 * UNIT))
  183.                                                 player_cnt = 2;
  184.                                         else if (ClickOn(click, return_img, 22 * UNIT, 0))
  185.                                                 break; //返回菜单
  186.                                 }
  187.                                 if (player_cnt)
  188.                                 {
  189.                                         BeginGame();
  190.                                         break;
  191.                                 }
  192.                         }
  193.                 }
  194.                 else if (ClickOn(click, game_help_img, 8 * UNIT, 10 * UNIT))
  195.                 {
  196.                         ShowHelp(); //查看游戏帮助
  197.                         while (1)
  198.                         {
  199.                                 click = GetMouseMsg();
  200.                                 if (click.mkLButton == true && ClickOn(click, return_img, 22 * UNIT, 0))
  201.                                         break;
  202.                         }
  203.                 }
  204.         }


  205.         getchar();
  206.         closegraph();                        // 关闭绘图窗口
  207.     return 0;
  208. }
复制代码

回复

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

小黑屋|51黑电子论坛 |51黑电子论坛6群 QQ 管理员QQ:125739409;技术交流QQ群281945664

Powered by 单片机教程网

快速回复 返回顶部 返回列表