summaryrefslogtreecommitdiffstats
path: root/pacman-c++/util.cpp
diff options
context:
space:
mode:
authortotycro <totycro@unknown-horizons.org>2011-04-09 15:08:13 +0200
committertotycro <totycro@unknown-horizons.org>2011-04-09 15:08:13 +0200
commit979c3b4528da1608404d6e163211280fee5da9c5 (patch)
treedd5584640933fc6bce1820bcc452af74d356396f /pacman-c++/util.cpp
parentd547dec802f76c346538144f4eacf6d8ca6310c4 (diff)
downloadfoop-979c3b4528da1608404d6e163211280fee5da9c5.tar.gz
foop-979c3b4528da1608404d6e163211280fee5da9c5.tar.bz2
foop-979c3b4528da1608404d6e163211280fee5da9c5.zip
added some utility
Diffstat (limited to 'pacman-c++/util.cpp')
-rw-r--r--pacman-c++/util.cpp177
1 files changed, 119 insertions, 58 deletions
diff --git a/pacman-c++/util.cpp b/pacman-c++/util.cpp
index 185b0a6..99a643e 100644
--- a/pacman-c++/util.cpp
+++ b/pacman-c++/util.cpp
@@ -1,76 +1,137 @@
1#include "util.h" 1#include "util.h"
2 2
3// temporary 3namespace Util {
4Transmission::map_t createDummyMap()
5{
6 Transmission::map_t map;
7 map = new Transmission::field_t*[Constants::map_size.width];
8 for (unsigned int i = 0; i < Constants::map_size.width; ++i)
9 map[i] = new Transmission::field_t[Constants::map_size.height];
10 4
11 for (unsigned int x = 0; x < Constants::map_size.width; ++x) 5 Transmission::map_t createEmptyMap() {
12 { 6 Transmission::map_t map;
13 for (unsigned int y = 0; y < Constants::map_size.height; ++y) 7 map = new Transmission::field_t*[Constants::map_size.width];
8 for (unsigned int i = 0; i < Constants::map_size.width; ++i)
9 map[i] = new Transmission::field_t[Constants::map_size.height];
10
11 for (unsigned int x = 0; x < Constants::map_size.width; ++x)
14 { 12 {
15 Transmission::field_t &cur = map[x][y]; 13 for (unsigned int y = 0; y < Constants::map_size.height; ++y)
16 cur = Transmission::none; 14 {
15 Transmission::field_t &cur = map[x][y];
16 cur = Transmission::none;
17 }
17 } 18 }
19 return map;
18 } 20 }
21 // temporary
22 Transmission::map_t createDummyMap()
23 {
24 Transmission::map_t map = createEmptyMap();
19 25
26 const char *tmpl[] = {
27 " # # ",
28 " #### ###### # #### # # ###### ### ",
29 " # # ",
30 " # ##### # # # # # ### # # # ",
31 " # # # # # # # # # # ## # # ",
32 " # # # # # # # # ### # # # # ",
33 " # # # # # # # # # # # # ## # ",
34 " # # ### ##### # ### # # # ",
35 " ### # ",
36 " # # ### #### #### #### ##### ",
37 " #### # #..# #..# #..# # # ",
38 " # # ### #..# #..# #### # # # # ",
39 " # # # #..# #..# # # ",
40 " # #### # #### #### # # ##### # ",
41 " # # ",
42 " #### ###### # ##### # ####### ### ",
43 " # # "
44 };
20 45
21 const char *tmpl[] = { 46 for (unsigned int x = 0; x < Constants::map_size.width; ++x)
22 " # # ", 47 {
23 " #### ###### # #### # # ###### ### ", 48 for (unsigned int y = 0; y < Constants::map_size.height; ++y)
24 " # # ", 49 {
25 " # ##### # # # # # ### # # # ", 50 Transmission::field_t &cur = map[x][y];
26 " # # # # # # # # # # ## # # ", 51 cur = Transmission::none;
27 " # # # # # # # # ### # # # # ", 52 if (tmpl[y][x] == '#')
28 " # # # # # # # # # # # # ## # ", 53 cur |= Color::none | Transmission::block;
29 " # # ### ##### # ### # # # ", 54 /* this is a simple hack to create areas where no
30 " ### # ", 55 * autoplaced points will be placed (see below)
31 " # # ### #### #### #### ##### ", 56 */
32 " #### # #..# #..# #..# # # ", 57 else if (tmpl[y][x] == '.')
33 " # # ### #..# #..# #### # # # # ", 58 cur |= Transmission::point;
34 " # # # #..# #..# # # ", 59 }
35 " # #### # #### #### # # ##### # ", 60 }
36 " # # ",
37 " #### ###### # ##### # ####### ### ",
38 " # # "
39 };
40 61
41 for (unsigned int x = 0; x < Constants::map_size.width; ++x) 62 map[0][0] |= Transmission::bonuspoint;
42 { 63 map[1][0] |= Color::red | Transmission::pacman | Transmission::direction_right;
43 for (unsigned int y = 0; y < Constants::map_size.height; ++y) 64 //map[2][0] |= Color::blue | Transmission::pacman | Transmission::direction_up;
65 //map[3][0] |= Color::green | Transmission::pacman | Transmission::direction_down;
66
67 /* auto place normal points*/
68 for (unsigned int x = 0; x < Constants::map_size.width; ++x)
44 { 69 {
45 Transmission::field_t &cur = map[x][y]; 70 for (unsigned int y = 0; y < Constants::map_size.height; ++y)
46 cur = Transmission::none; 71 {
47 if (tmpl[y][x] == '#') 72 Transmission::field_t &cur = map[x][y];
48 cur |= Color::none | Transmission::block; 73 if (cur == Transmission::none)
49 /* this is a simple hack to create areas where no 74 cur |= Transmission::point;
50 * autoplaced points will be placed (see below) 75 else if (cur == Transmission::point)
51 */ 76 cur = Transmission::none;
52 else if (tmpl[y][x] == '.') 77 }
53 cur |= Transmission::point;
54 } 78 }
79
80 return map;
55 } 81 }
56 82
57 map[0][0] |= Transmission::bonuspoint;
58 map[1][0] |= Color::red | Transmission::pacman | Transmission::direction_right;
59 //map[2][0] |= Color::blue | Transmission::pacman | Transmission::direction_up;
60 //map[3][0] |= Color::green | Transmission::pacman | Transmission::direction_down;
61 83
62 /* auto place normal points*/ 84 Transmission::field_t actorMovementToTransmission(Actor::Movement mov, Transmission::field_t def) {
63 for (unsigned int x = 0; x < Constants::map_size.width; ++x) 85 switch (mov) {
64 { 86 case Actor::None:
65 for (unsigned int y = 0; y < Constants::map_size.height; ++y) 87 return Transmission::direction_none;
66 { 88 break;
67 Transmission::field_t &cur = map[x][y]; 89 case Actor::Left:
68 if (cur == Transmission::none) 90 return Transmission::direction_left;
69 cur |= Transmission::point; 91 break;
70 else if (cur == Transmission::point) 92 case Actor::Right:
71 cur = Transmission::none; 93 return Transmission::direction_right;
94 break;
95 case Actor::Up:
96 return Transmission::direction_up;
97 break;
98 case Actor::Down:
99 return Transmission::direction_down;
100 break;
101 default:
102 if (def == static_cast<Transmission::field_t>(-1)) {
103 Q_ASSERT(false);
104 } else {
105 return def;
106 }
72 } 107 }
108 return 0; // for pleasing the compiler
73 } 109 }
74 110
75 return map; 111 Actor::Movement transmissionMovementToActor(Transmission::field_t field, Actor::Movement def) {
112 switch (field) {
113 case Transmission::direction_none:
114 return Actor::None;
115 break;
116 case Transmission::direction_left:
117 return Actor::Left;
118 break;
119 case Transmission::direction_right:
120 return Actor::Right;
121 break;
122 case Transmission::direction_up:
123 return Actor::Up;
124 break;
125 case Transmission::direction_down:
126 return Actor::Down;
127 break;
128 default:
129 if (def == Actor::Movement(-1)) {
130 Q_ASSERT(false);
131 } else {
132 return def;
133 }
134 }
135 return Actor::None; // for pleasing the compiler
136 }
76} 137}