updated on Thu Jan 19 20:01:47 UTC 2012
[aur-mirror.git] / ar-breakout / main.cpp
blobb73b9d33423736bae87ea1c8de88ce58d35ed1ca
1 #include "gestlib.h"
2 #include <vector>
3 #include <iostream>
4 using namespace cv;
6 int layer, dCount;
8 class brick
10 private:
11 int x, y, x_;
12 public:
13 brick(int a, int b)
15 x = a;
16 y = b;
19 brick()
23 bool isCollide(int a, int b)
25 if(layer == x)
26 if((a>x) && (a<x+10))
27 if((b>y) && (b<y+40))
28 return true;
29 return false;
32 void destroy()
34 dCount++;
35 x_ = x;
36 x = 400;
39 Point coords()
41 return Point(x, y);
44 Point coords2()
46 return Point(x+10, y+40);
49 void reset()
51 x = x_;
54 std::vector<brick> brix;
56 Scalar colr(int x)
58 switch(x)
60 case 280:
61 return Scalar(0x00, 0xff, 0xff);
62 case 290:
63 return Scalar(0xff, 0xff, 0x00);
64 case 300:
65 return Scalar(0x00, 0xff, 0x00);
66 case 310:
67 return Scalar(0xff, 0xff, 0xff);
69 return Scalar(0xff, 0xff, 0xff);
72 int main(int argc, char *argv[])
75 camera c(0);
76 tracker tr;
78 cvNamedWindow("foreground",1);
80 Mat image, test;
81 int x, y, dx, dy;
82 int i, j;
83 char k_;
85 x = 150;
86 y = 60;
88 dx=0;
89 dy=0;
91 layer = 280;
92 dCount = 0;
94 brix.push_back(brick(280, 0));
95 brix.push_back(brick(280, 40));
96 brix.push_back(brick(280, 80));
97 brix.push_back(brick(280, 120));
98 brix.push_back(brick(280, 160));
99 brix.push_back(brick(280, 200));
101 brix.push_back(brick(290, 0));
102 brix.push_back(brick(290, 40));
103 brix.push_back(brick(290, 80));
104 brix.push_back(brick(290, 120));
105 brix.push_back(brick(290, 160));
106 brix.push_back(brick(290, 200));
108 brix.push_back(brick(300, 0));
109 brix.push_back(brick(300, 40));
110 brix.push_back(brick(300, 80));
111 brix.push_back(brick(300, 120));
112 brix.push_back(brick(300, 160));
113 brix.push_back(brick(300, 200));
115 brix.push_back(brick(310, 0));
116 brix.push_back(brick(310, 40));
117 brix.push_back(brick(310, 80));
118 brix.push_back(brick(310, 120));
119 brix.push_back(brick(310, 160));
120 brix.push_back(brick(310, 200));
124 //Game Loop
125 while(1)
127 c.read();
128 tr.getForeground();
129 tr.findHand();
131 image = tr.read();
132 rectangle(image, Point(x, y),Point(x+20, y+20), Scalar(0xff, 0x00, 0x00), 3);
134 //Draw bricks
136 for(std::vector<brick>::iterator b=brix.begin(); b!=brix.end(); b++)
138 rectangle(image, b->coords(), b->coords2(), colr(b->coords().x), 1);
141 test.create(Size(1280, 800), image.type());
142 resize(image, test, test.size());
144 imshow("foreground", test);
145 //imshow("foreground", image);
147 for(i=x; i < x+20; i++)
149 if (tr.collide(i, y-2))
151 if(y < 200)
152 dy=20;
153 break;
157 for(i=x; i < x+20; i++)
159 if (tr.collide(i, y+22))
161 if(y > 20)
162 dy=-20;
163 break;
167 for(i=y; i < y+20; i++)
169 if (tr.collide(x-2, i))
171 if(x < layer-40)
172 dx=25;
173 break;
177 for(i=y; i < y+20; i++)
179 for(std::vector<brick>::iterator b=brix.begin(); b!=brix.end(); b++)
181 for(j=x; j<x+20; j++)
182 if(b->isCollide(j, i))
183 b->destroy();
186 if (tr.collide(x+22, i))
188 if(x > 20)
189 dx=-25;
190 break;
194 x+=dx;
195 y+=dy;
197 if(x<20)
199 if(dx<0)
200 dx*=-1;
201 else if(dx==0)
202 dx = 10;
205 if(x > layer)
207 if(dx>0)
208 dx*=-1;
209 else if(dx==0)
210 dx = -10;
213 if(y<20)
215 if(dy<0)
216 dy*=-1;
217 else if(dy==0)
218 dy = 10;
221 if(y>200)
223 if(dy>0)
224 dy*=-1;
225 else if(dy==0)
226 dy = -10;
229 if(dx!=0)
230 dx = (dx<0) ? dx+1:dx-1;
231 if(dy!=0)
232 dy = (dy<0) ? dy+1:dy-1;
234 if(dCount == 6)
236 dCount = 0;
237 layer += 10;
240 k_ = waitKey(30);
241 if(k_ == 'q')
242 break;
243 if(layer == 320)
245 for(std::vector<brick>::iterator b=brix.begin(); b!=brix.end(); b++)
247 b->reset();
249 layer = 280;
250 dCount = 0;
251 //std::cout<<"You Win!!!"<<std::endl;
252 //break;
256 cvDestroyWindow("foreground");
257 return 0;