added some small proto
authornireco
Fri, 31 Oct 2008 07:23:24 +0000
changeset 1 085631252347
parent 0 c8174cf25e06
child 2 24d2ec240473
added some small proto
proto/Player.hh
proto/Player.hh.gch
proto/a.out
proto/coor.hh
proto/game_state.hh
proto/game_state.hh.gch
proto/t2t.cc
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/proto/Player.hh	Fri Oct 31 07:23:24 2008 +0000
@@ -0,0 +1,17 @@
+#ifndef PLAYER_HH
+#define PLAYER_HH
+
+#include "coor.hh"
+
+class Player {
+public:
+	Player()
+		: xy(140.0, 140.0), xy2(140.0, 140.0) {
+
+	}
+
+	coor<double> xy;
+	coor<double> xy2;
+};
+
+#endif
Binary file proto/Player.hh.gch has changed
Binary file proto/a.out has changed
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/proto/coor.hh	Fri Oct 31 07:23:24 2008 +0000
@@ -0,0 +1,48 @@
+#ifndef COOR_H
+#define COOR_H
+
+//#define TYPE double
+
+template <typename TYPE>
+class coor {
+public:
+	TYPE x;
+	TYPE y;
+	coor() {
+		x = 0; y = 0;
+	}
+	coor(TYPE X, TYPE Y) {
+		x = X;
+		y = Y;
+	}
+	coor(const coor& c) {
+		x = c.x;
+		y = c.y;
+	}
+	void operator = (const coor& c) {
+		x = c.x;
+		y = c.y;
+	}
+	coor operator + (const coor& c) {
+		return coor(x+c.x, y+c.y);
+	}
+	coor operator - (const coor& c) {
+		return coor(x-c.x, y-c.y);
+	}
+	void operator += (const coor& c) {
+		x += c.x;
+		y += c.y;
+	}
+
+	coor operator * (const double d) {
+		return coor(x*d, y*d);
+	}
+
+};
+
+template<typename T>
+bool operator== (const coor<T>& c1, const coor<T>& c2) {
+	return ((c1.x == c2.x) && (c1.y == c2.y));
+}
+
+#endif
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/proto/game_state.hh	Fri Oct 31 07:23:24 2008 +0000
@@ -0,0 +1,25 @@
+#ifndef GAME_STATE_HH
+#define GAME_STATE_HH
+
+#include "Player.hh"
+
+class game_state {
+public:
+	game_state() : cave_width(640), cave_height(480), cave(640*480) {
+		for(int i = 0; i < 60000; i++) {
+			int x = i%300;
+			int y = i/300;
+			cave[x+100+(y+100)*640] = 1;
+		}
+	}
+	void addPlayer(Player p) {
+		players.push_back(p);
+	}
+
+	std::vector<int> cave;
+	int cave_width;
+	int cave_height;
+	std::vector<Player> players;
+};
+
+#endif
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/proto/t2t.cc	Fri Oct 31 07:23:24 2008 +0000
@@ -0,0 +1,115 @@
+#include <ClanLib/core.h>
+#include <ClanLib/gl.h> //do I need this in linux?
+#include <ClanLib/display.h>
+#include <ClanLib/application.h>
+#include "coor.hh"
+#include "game_state.hh"
+#include "Player.hh"
+
+class CL_Game : public CL_ClanApplication {
+private:
+	bool keep_going;
+	void check_input() {
+		if(CL_Keyboard::get_keycode(CL_KEY_ESCAPE))
+			keep_going = false;
+		if(CL_Keyboard::get_keycode(CL_KEY_UP)) {
+			if(gs.cave[(int)(gs.players[0].xy.x+
+						((int)gs.players[0].xy.y+1)*640)] == 0) {
+				gs.players[0].xy2.y += 4;
+			}
+		}
+		if(CL_Keyboard::get_keycode(CL_KEY_LEFT)) {
+			gs.players[0].xy2.x += 0.2;
+		}
+		if(CL_Keyboard::get_keycode(CL_KEY_RIGHT)) {
+			gs.players[0].xy2.x -= 0.2;
+		}
+	}
+
+public:
+	game_state gs;
+
+	CL_Game() : keep_going(true) {}
+	virtual int main(int argc, char **argv) {
+		CL_SetupCore setup_init;
+		CL_SetupDisplay setup_disp;
+		CL_SetupGL setup_gl;
+		gs.addPlayer(Player());
+
+		CL_DisplayWindow win("ikkuna", 640, 480);
+//		CL_Surface bg(CL_PNGProvider("image.png");
+
+		unsigned int last_draw = CL_System::get_time();
+		int r = 100, g = 100, b = 100;
+		unsigned int frame_count = 0;
+		bool R = false, G = false, B = false;
+
+		while(keep_going) { //not good idea to put infinite loop
+			CL_Display::clear(CL_Color(r, g, b));
+//			bg.draw(0, 0);
+//			CL_Display::fill_rect(CL_Rect((int)(x-10.0), (int)(y-10.0), 
+//					(int)(x+10.0), 
+//					(int)(y+10.0)), CL_Color(255-r, 255-g, 255-b));
+			for(int i = 0; i < 640*480; i++) {
+				int x = i%640;
+				int y = i/640;
+				CL_Color col = CL_Color(200, 100, 60);
+				if(gs.cave[i] == 1) {
+					col = CL_Color(50, 50, 200);
+				}
+				CL_Display::draw_pixel(x, y, col);
+			}
+			Player& pl1 = gs.players[0];
+			int pl1xi = (int)(pl1.xy.x);
+			int pl1yi = (int)(pl1.xy.y);
+			CL_Display::fill_rect(CL_Rect(pl1xi-10, pl1yi-10, 
+					pl1xi+10, pl1yi+10), CL_Color(255-r, 255-g, 255-b));
+
+			for(int i = 0; i < gs.players.size(); i++) {
+				Player& pl2 = gs.players[i];
+				pl2.xy2.y -= 0.2;
+				double tmpx = pl2.xy.x, tmpy = pl2.xy.y;
+				pl2.xy.x = 2*pl2.xy.x-pl2.xy2.x;
+				pl2.xy.y = 2*pl2.xy.y-pl2.xy2.y;
+				pl2.xy2.x = tmpx;
+				pl2.xy2.y = tmpy;
+				if(gs.cave[((int)(pl2.xy.x + 
+							((int)pl2.xy.y)*640))%(640*480)] == 0) {
+					pl2.xy = pl2.xy2;
+				}
+			}
+
+			CL_Display::flip(1);
+			frame_count++;
+			unsigned int cur_draw = CL_System::get_time();
+
+			check_input();
+
+			if(R) { r++;
+			} else { r--; }
+			if(G) { g++;
+			} else { g--; }
+			if(B) { b++;
+			} else { b--; }
+			if(r < 0) r = 0;
+			if(g < 0) g = 0;
+			if(b < 0) b = 0;
+			if(r > 255) r = 255;
+			if(g > 255) g = 255;
+			if(b > 255) b = 255;
+
+			if(frame_count % 100 == 0) {
+				R = rand()%2;
+				G = rand()%2;
+				B = rand()%2;
+			}
+
+			last_draw = cur_draw;
+			CL_System::keep_alive();
+//			sleep(10); //flip already wait a short amount of time
+		}
+		return 0;
+	}
+};
+
+CL_Game inst;