123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131 |
- #define MAX_PATH 32
- #include "raylib.h"
- #include <math.h>
- static int mapWidth = 20;
- static int mapHeight = 10;
- static float tileWidth;
- static float tileHeight;
- // This is our tile map. Note that [y][x]!!
- int map[10][20] = { {1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1},
- {1,0,0,0,0,0,0,0,0,0,0,1,0,0,0,1,1,1,1,1},
- {1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,1,1,1,1},
- {1,0,0,0,0,0,0,0,0,0,0,1,0,0,0,1,1,1,1,1},
- {1,1,1,1,1,1,1,1,0,1,1,1,1,0,0,1,1,1,1,1},
- {1,0,0,0,0,0,0,1,0,0,0,1,0,0,0,0,0,0,0,1},
- {1,0,0,0,0,0,0,1,0,0,0,1,0,0,0,0,0,0,0,1},
- {1,0,0,0,0,0,0,0,0,0,0,1,1,1,1,0,0,0,0,1},
- {1,0,0,0,0,0,0,1,0,0,0,1,1,1,1,0,0,0,0,1},
- {1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1}};
- typedef struct player{
- bool active;
- int x;
- int y;
- int pathx[MAX_PATH];
- int pathy[MAX_PATH];
- }player;
- static player p;
- static void dropbreadcrumb(void);
- int main(void)
- {
- // Initialization
- //--------------------------------------------------------------------------------------
- const int screenWidth = 800;
- const int screenHeight = 450;
- InitWindow(screenWidth, screenHeight, "raylib example.");
-
- SetTargetFPS(60); // Set our game to run at 60 frames-per-second
- //--------------------------------------------------------------------------------------
- p.active = true;
- p.x = 5;
- p.y = 5;
- for(int i=MAX_PATH-1;i>-1;i-=1){
- p.pathx[i]=-1;
- p.pathy[i]=-1;
- }
- dropbreadcrumb();
- tileWidth = abs((float)screenWidth/(float)mapWidth);
- tileHeight = abs((float)screenHeight/(float)mapHeight);
- // Main game loop
- while (!WindowShouldClose()) // Detect window close button or ESC key
- {
- // Update
- //----------------------------------------------------------------------------------
- if(IsKeyReleased(KEY_UP) && map[p.y-1][p.x]==0){
- p.y-=1;
- dropbreadcrumb();
- }
- if(IsKeyReleased(KEY_DOWN) && map[p.y+1][p.x]==0){
- p.y+=1;
- dropbreadcrumb();
- }
- if(IsKeyReleased(KEY_LEFT) && map[p.y][p.x-1]==0){
- p.x-=1;
- dropbreadcrumb();
- }
- if(IsKeyReleased(KEY_RIGHT) && map[p.y][p.x+1]==0){
- p.x+=1;
- dropbreadcrumb();
- }
- //----------------------------------------------------------------------------------
- // Draw
- //----------------------------------------------------------------------------------
- BeginDrawing();
- ClearBackground(RAYWHITE);
-
- //
- // Draw our tilemap.
- for(int y=0;y<10;y++){
- for(int x=0;x<20;x++){
- if(map[y][x]==1){
- DrawRectangle(x*tileWidth,y*tileHeight,tileWidth,tileHeight,BLACK);
- }
- }
- }
- // Draw our breadcrumb
- for(int i=0;i<MAX_PATH;i++){
- if(p.pathx[i]>-1)
- DrawRectangle( p.pathx[i]*tileWidth+tileWidth/4,p.pathy[i]*tileHeight+tileHeight/4,
- tileWidth-tileWidth/2,tileHeight-tileHeight/2,(Color){50,50,50,255-(255.0f/32.0f)*i});
- }
- // Draw our player
- DrawRectangle(p.x*tileWidth,p.y*tileHeight,tileWidth,tileHeight,BLUE);
-
- //
- //
- DrawText("BreadCrumb Example. Use cursor keys to move around.",0,0,20,GRAY);
-
- EndDrawing();
- //----------------------------------------------------------------------------------
- }
- // De-Initialization
- //--------------------------------------------------------------------------------------
- CloseWindow(); // Close window and OpenGL context
- //--------------------------------------------------------------------------------------
- return 0;
- }
- void dropbreadcrumb(){
- // first shift the path one step down.
- for(int i=MAX_PATH-1;i>0;i--){
- p.pathx[i] = p.pathx[i-1];
- p.pathy[i] = p.pathy[i-1];
- }
- // insert the current position to the top of the path array.
- p.pathx[0] = p.x;
- p.pathy[0] = p.y;
- }
|