static void Main(string[] args) { Raylib.InitWindow(800, 600, ""); int mapTarget = 0; int mapDisplay = 1; char[,] mapP1 = { { 'B', 'B', 'B', 'B', 'B', 'B', 'B', 'B', 'B', 'B', 'B', 'B', 'B', 'B', 'B', 'B', 'B', 'B', 'B', 'B' }, { 'B', ' ', ' ', ' ', ' ', ' ', ' ', ' ', ' ', ' ', ' ', ' ', ' ', ' ', ' ', ' ', 'B', ' ', ' ', 'B' }, { 'B', ' ', ' ', ' ', ' ', 'B', 'B', 'B', ' ', ' ', ' ', ' ', ' ', ' ', ' ', ' ', ' ', ' ', ' ', 'B' }, { 'B', ' ', ' ', ' ', ' ', ' ', ' ', ' ', ' ', ' ', ' ', ' ', ' ', ' ', ' ', ' ', 'B', ' ', ' ', 'B' }, { 'B', ' ', ' ', ' ', ' ', 'B', 'B', 'B', ' ', ' ', ' ', ' ', ' ', ' ', ' ', ' ', ' ', ' ', ' ', 'B' }, { 'B', ' ', 'E', ' ', ' ', ' ', ' ', ' ', ' ', ' ', ' ', ' ', ' ', 'E', ' ', ' ', 'B', ' ', ' ', 'B' }, { 'B', ' ', ' ', ' ', ' ', 'B', 'B', 'B', ' ', ' ', ' ', ' ', ' ', ' ', ' ', ' ', ' ', ' ', ' ', 'B' }, { 'B', ' ', ' ', ' ', ' ', ' ', ' ', ' ', ' ', ' ', ' ', ' ', ' ', ' ', ' ', ' ', 'B', ' ', ' ', 'B' }, { 'B', ' ', ' ', ' ', ' ', 'B', 'B', 'B', ' ', ' ', ' ', ' ', ' ', ' ', ' ', ' ', ' ', ' ', ' ', 'B' }, { 'B', ' ', ' ', ' ', ' ', ' ', ' ', ' ', ' ', 'P', ' ', ' ', ' ', ' ', ' ', ' ', 'B', ' ', ' ', 'B' }, { 'B', ' ', ' ', ' ', ' ', 'B', 'B', 'B', ' ', ' ', ' ', ' ', ' ', ' ', ' ', ' ', ' ', ' ', ' ', 'B' }, { 'B', ' ', ' ', ' ', ' ', ' ', ' ', ' ', ' ', ' ', ' ', ' ', ' ', ' ', ' ', ' ', 'B', ' ', ' ', 'B' }, { 'B', ' ', ' ', ' ', ' ', 'B', 'B', 'B', ' ', ' ', ' ', ' ', ' ', ' ', ' ', ' ', ' ', ' ', ' ', 'B' }, { 'B', ' ', ' ', ' ', ' ', ' ', ' ', ' ', ' ', ' ', ' ', ' ', ' ', ' ', ' ', ' ', 'B', ' ', ' ', 'B' }, { 'B', ' ', ' ', ' ', ' ', 'B', 'B', 'B', ' ', ' ', ' ', ' ', ' ', ' ', ' ', ' ', ' ', ' ', ' ', 'B' }, { 'B', ' ', ' ', ' ', ' ', ' ', ' ', ' ', ' ', ' ', ' ', ' ', ' ', ' ', ' ', ' ', 'B', ' ', ' ', 'B' }, { 'B', ' ', ' ', ' ', ' ', 'B', 'B', 'B', ' ', ' ', ' ', 'E', ' ', ' ', ' ', ' ', ' ', ' ', ' ', 'B' }, { 'B', ' ', ' ', ' ', ' ', ' ', ' ', ' ', ' ', ' ', ' ', ' ', ' ', ' ', ' ', ' ', 'B', ' ', ' ', 'B' }, { 'B', ' ', ' ', ' ', ' ', 'B', 'B', 'B', ' ', ' ', ' ', ' ', ' ', ' ', ' ', ' ', ' ', ' ', ' ', 'B' }, { 'B', 'B', 'B', 'B', 'B', 'B', 'B', 'B', 'B', 'B', 'B', 'B', 'B', 'B', 'B', 'B', 'B', 'B', 'B', 'B' }, }; char[] mapP1D1 = { 'B', 'B', 'B', 'B', 'B', 'B', 'B', 'B', 'B', 'B', 'B', 'B', 'B', 'B', 'B', 'B', 'B', 'B', 'B', 'B', 'B', ' ', ' ', ' ', ' ', ' ', ' ', ' ', ' ', ' ', ' ', ' ', ' ', ' ', ' ', ' ', 'B', ' ', ' ', 'B', 'B', ' ', ' ', ' ', ' ', 'B', 'B', 'B', ' ', ' ', ' ', ' ', ' ', ' ', ' ', ' ', ' ', ' ', ' ', 'B', 'B', ' ', ' ', ' ', ' ', ' ', ' ', ' ', ' ', ' ', ' ', ' ', ' ', ' ', ' ', ' ', 'B', ' ', ' ', 'B', 'B', ' ', ' ', ' ', ' ', 'B', 'B', 'B', ' ', ' ', ' ', ' ', ' ', ' ', ' ', ' ', ' ', ' ', ' ', 'B', 'B', ' ', 'E', ' ', ' ', ' ', ' ', ' ', ' ', ' ', ' ', ' ', ' ', 'E', ' ', ' ', 'B', ' ', ' ', 'B', 'B', ' ', ' ', ' ', ' ', 'B', 'B', 'B', ' ', ' ', ' ', ' ', ' ', ' ', ' ', ' ', ' ', ' ', ' ', 'B', 'B', ' ', ' ', ' ', ' ', ' ', ' ', ' ', ' ', ' ', ' ', ' ', ' ', ' ', ' ', ' ', 'B', ' ', ' ', 'B', 'B', ' ', ' ', ' ', ' ', 'B', 'B', 'B', ' ', ' ', ' ', ' ', ' ', ' ', ' ', ' ', ' ', ' ', ' ', 'B', 'B', ' ', ' ', ' ', ' ', ' ', ' ', ' ', ' ', 'P', ' ', ' ', ' ', ' ', ' ', ' ', 'B', ' ', ' ', 'B', 'B', ' ', ' ', ' ', ' ', 'B', 'B', 'B', ' ', ' ', ' ', ' ', ' ', ' ', ' ', ' ', ' ', ' ', ' ', 'B', 'B', ' ', ' ', ' ', ' ', ' ', ' ', ' ', ' ', ' ', ' ', ' ', ' ', ' ', ' ', ' ', 'B', ' ', ' ', 'B', 'B', ' ', ' ', ' ', ' ', 'B', 'B', 'B', ' ', ' ', ' ', ' ', ' ', ' ', ' ', ' ', ' ', ' ', ' ', 'B', 'B', ' ', ' ', ' ', ' ', ' ', ' ', ' ', ' ', ' ', ' ', ' ', ' ', ' ', ' ', ' ', 'B', ' ', ' ', 'B', 'B', ' ', ' ', ' ', ' ', 'B', 'B', 'B', ' ', ' ', ' ', ' ', ' ', ' ', ' ', ' ', ' ', ' ', ' ', 'B', 'B', ' ', ' ', ' ', ' ', ' ', ' ', ' ', ' ', ' ', ' ', ' ', ' ', ' ', ' ', ' ', 'B', ' ', ' ', 'B', 'B', ' ', ' ', ' ', ' ', 'B', 'B', 'B', ' ', ' ', ' ', 'E', ' ', ' ', ' ', ' ', ' ', ' ', ' ', 'B', 'B', ' ', ' ', ' ', ' ', ' ', ' ', ' ', ' ', ' ', ' ', ' ', ' ', ' ', ' ', ' ', 'B', ' ', ' ', 'B', 'B', ' ', ' ', ' ', ' ', 'B', 'B', 'B', ' ', ' ', ' ', ' ', ' ', ' ', ' ', ' ', ' ', ' ', ' ', 'B', 'B', 'B', 'B', 'B', 'B', 'B', 'B', 'B', 'B', 'B', 'B', 'B', 'B', 'B', 'B', 'B', 'B', 'B', 'B', 'B' }; char[,] mapP2 = { { 'B', 'B', 'B', 'B', 'B', 'B', 'B', 'B', 'B', 'B', 'B', 'B', 'B', 'B', 'B', 'B', 'B', 'B', 'B', 'B' }, { 'B', 'P', ' ', ' ', ' ', ' ', ' ', ' ', ' ', ' ', ' ', ' ', ' ', ' ', ' ', ' ', 'B', ' ', ' ', 'B' }, { 'B', ' ', ' ', ' ', ' ', 'B', 'B', 'B', ' ', ' ', ' ', ' ', ' ', ' ', ' ', ' ', ' ', ' ', ' ', 'B' }, { 'B', ' ', ' ', ' ', 'B', ' ', ' ', ' ', 'B', ' ', ' ', ' ', ' ', ' ', ' ', ' ', 'B', ' ', ' ', 'B' }, { 'B', ' ', ' ', ' ', ' ', 'B', 'B', 'B', ' ', ' ', 'B', ' ', 'B', ' ', ' ', ' ', ' ', ' ', ' ', 'B' }, { 'B', ' ', ' ', ' ', ' ', ' ', 'B', ' ', ' ', ' ', ' ', ' ', ' ', ' ', ' ', ' ', 'B', ' ', ' ', 'B' }, { 'B', ' ', 'E', ' ', ' ', 'B', 'B', 'B', ' ', ' ', ' ', ' ', ' ', ' ', ' ', ' ', ' ', ' ', ' ', 'B' }, { 'B', ' ', ' ', ' ', ' ', ' ', 'B', ' ', ' ', ' ', ' ', ' ', ' ', ' ', ' ', ' ', 'B', ' ', ' ', 'B' }, { 'B', ' ', ' ', ' ', ' ', 'B', 'B', 'B', ' ', ' ', ' ', ' ', ' ', ' ', ' ', ' ', ' ', ' ', ' ', 'B' }, { 'B', ' ', ' ', ' ', ' ', ' ', 'B', ' ', ' ', ' ', ' ', ' ', ' ', ' ', ' ', ' ', 'B', ' ', 'E', 'B' }, { 'B', ' ', ' ', ' ', ' ', 'B', 'B', 'B', ' ', ' ', ' ', ' ', ' ', ' ', ' ', ' ', ' ', ' ', ' ', 'B' }, { 'B', ' ', ' ', ' ', ' ', ' ', 'B', 'E', ' ', ' ', ' ', ' ', ' ', ' ', ' ', ' ', 'B', ' ', ' ', 'B' }, { 'B', ' ', ' ', ' ', ' ', 'B', 'B', 'B', ' ', ' ', ' ', ' ', ' ', ' ', ' ', ' ', ' ', ' ', ' ', 'B' }, { 'B', ' ', ' ', ' ', ' ', ' ', 'B', ' ', ' ', ' ', ' ', ' ', ' ', ' ', ' ', ' ', 'B', ' ', ' ', 'B' }, { 'B', ' ', ' ', ' ', ' ', 'B', 'B', 'B', ' ', ' ', ' ', ' ', ' ', ' ', ' ', ' ', ' ', ' ', ' ', 'B' }, { 'B', ' ', ' ', ' ', ' ', ' ', 'B', ' ', ' ', ' ', ' ', ' ', ' ', ' ', ' ', ' ', 'B', ' ', ' ', 'B' }, { 'B', ' ', ' ', ' ', ' ', 'B', 'B', 'B', ' ', ' ', ' ', ' ', ' ', ' ', ' ', ' ', ' ', ' ', ' ', 'B' }, { 'B', ' ', ' ', ' ', ' ', ' ', 'B', ' ', ' ', ' ', ' ', ' ', ' ', ' ', ' ', ' ', 'B', ' ', ' ', 'B' }, { 'B', ' ', ' ', ' ', ' ', 'B', 'B', 'B', ' ', ' ', ' ', ' ', ' ', ' ', ' ', ' ', ' ', ' ', ' ', 'B' }, { 'B', 'B', 'B', 'B', 'B', 'B', 'B', 'B', 'B', 'B', 'B', 'B', 'B', 'B', 'B', 'B', 'B', 'B', 'B', 'B' }, }; //Ska jag värkligen göra en raycasting och inte bara top down? float playerY = 5; float playerX = 5; float playerA = 0; float playerASpeed = 0.05f; int mapScale = 10; float screenWidth = 800; float screenHeight = 600; float fov = 3.14159f / 4.0f; float depth = 2.0f; float[,] playerPos = { { playerY }, { playerX }, }; float playerXSpeed = 0f; float playerYSpeed = 0f; float playerSpeedIncr = 0.0001f; float playerSpeedDecr = 0.0001f; bool playerLock = false; int playerStill = 0; mapSelect map = mapSelect.map0; while (!Raylib.WindowShouldClose()) { //Map selector if (mapTarget == 0) { switch (mapDisplay) { case 1: map = mapSelect.map1; break; case 2: map = mapSelect.map2; break; default: Raylib.DrawText("Text Not found.", 200, 100, 50, Color.RED); break; } mapDisplay++; mapTarget = 1; } //Drawing begins Raylib.BeginDrawing(); Raylib.ClearBackground(Color.BLACK); int offsetX = 50; int offsetY = 50; //map writeing for (int y = 0; y < mapP1.GetLength(0); y++) { for (int x = 0; x < mapP1.GetLength(1); x++) { int yLook = -15; int offset = 15; int collumnNumber = 0; //antalet strålar som vi skickar ut är ett konstant värde //i forloopen går vi mellan -15 och 15 med ett steg av 0.1 vilket betyder att vi kommer att skicka ut 30 / 0.1 strålar int numberOfRays = 300; for (float xLook = -offset; xLook <= offset; xLook += 0.1f) { //för att veta vart du ska placera varje kollumn håller du koll på varje stråles ordning //sen ritar du kollumnerna i den ordning de kom collumnNumber += 1; //vi räknar ut lutningen av linjen (strålen) som formas av de två punkterna (0, 0) och (x, y) //vi vill dock ha lutningen relativ till y, så istället för y = kx + m vill vi ha x = ky + m //(m för varje linje (stråle) kommer vara noll btw så vi ingnorerar m) //anledningen till det här är för att linjen som bildas när punkterna (playerX, playerY) och (x, y) har samma x-koordinat inte kommer //att ha 'oändlig' lutning relativ till x eftersom den går rakt upp. Det här ger oss ett problem, vilket är varför vi vill ha lutningen //relativ till y float gradient = xLook / yLook; //detta är samma sak som (x - 0) / (y - 0) vanligtvis skulle vi använda (y2 - y1) / (x2 - x1) men vi vill ha lutningen //relativ till y så vi gör (x2 - x1) / (y2 - y1) bool collision = false; //om strålen kolliderar med något sätter vi denna till true float y2Look = 0; while (collision == false && y2Look >= yLook) { y2Look -= 0.01f; float x2Look = y2Look * gradient; //x = ky + m, där m = 0 //nu när vi har både x2 och y2 vill vi rotera dem med playerAngle runt origo float rotatedX = 0; float rotatedY = 0; rotatedX = (float)Math.Cos(playerA) * y2Look - (float)Math.Sin(playerA) * x2Look; rotatedY = (float)Math.Sin(playerA) * y2Look + (float)Math.Cos(playerA) * x2Look; try { //jag har detta i ett try block eftersom det kan hända att vi försöker kolla i ett index som inte finns med i 2D arrayen för mappen //vilket skulle ge oss ArrayIndexOutOfBoundsException if (map == mapSelect.map1) { if (mapP1[(int)(rotatedY + playerY), (int)(rotatedX + playerX)] == 'B') { collision = true; float rayLength = Math.Abs(y2Look); //fill bestämmer färgen som kommer att användas när vi ritar något på skärmen //för att göra det lite enklare att förstå hur långt borta föremål är så kan vi göra så att föremål som är längre bort också är mörkare if (rayLength > 0 || rayLength > depth) { float fill = 255.0f / rayLength; Color fillcolor = new Color((int)fill, (int)fill, (int)fill, 255); //tjockleken på varje kollumn kommer vara en konstant. För att få kollumnerna att täcka hela skärmen gör vi tjockleken //till antal strålar (vilket också är antal kollumner) delat på tjockleken av fönstret Raylib.DrawRectangle(((int)(collumnNumber * (screenWidth / numberOfRays))), (int)((screenHeight / 2) - (screenHeight / rayLength) * 0.5), (int)(screenWidth / numberOfRays), (int)(screenHeight / rayLength), fillcolor); //rect tar start position för x, start position för y, bredd, höjd //du får implementera din egen funktion för att rita rektanglar //det är viktigt att de ritas utåt från mitten } } } } catch { //att fortsätta kolla efter kollisioner för detta tillfälle är onödigt så vi bryter ut ur while-loopen break; } } } } if (Raylib.IsKeyDown(KeyboardKey.KEY_A)) { playerX += (float)Math.Cos(playerA) * playerASpeed; playerY -= (float)Math.Sin(playerA) * playerASpeed; } else if (Raylib.IsKeyDown(KeyboardKey.KEY_D)) { playerX -= (float)Math.Cos(playerA) * playerASpeed; playerY += (float)Math.Sin(playerA) * playerASpeed; } if (Raylib.IsKeyDown(KeyboardKey.KEY_S)) { playerX += (float)Math.Cos(playerA) * playerASpeed; playerY += (float)Math.Sin(playerA) * playerASpeed; } else if (Raylib.IsKeyDown(KeyboardKey.KEY_W)) { playerX -= (float)Math.Cos(playerA) * playerASpeed; playerY -= (float)Math.Sin(playerA) * playerASpeed; } if (Raylib.IsKeyDown(KeyboardKey.KEY_RIGHT)) { playerA = playerA - playerASpeed; } if (Raylib.IsKeyDown(KeyboardKey.KEY_LEFT)) { playerA = playerA + playerASpeed; } if (Raylib.IsKeyDown(KeyboardKey.KEY_ENTER)) { mapTarget = 0; playerLock = false; playerXSpeed = 0; playerYSpeed = 0; playerX = 0; playerY = 0; } Raylib.EndDrawing(); } } }
static void Main(string[] args) { List <Enemy> enemies = new List <Enemy>(); List <Block> mapList = new List <Block>(); Raylib.InitWindow(800, 600, ""); int mapTarget = 0; int mapDisplay = 1; char[,] mapP1 = { { 'B', 'B', 'B', 'B', 'B', 'B', 'B', 'B', 'B', 'B', 'B', 'B', 'B', 'B', 'B', 'B', 'B', 'B', 'B', 'B' }, { 'B', ' ', ' ', ' ', ' ', ' ', ' ', ' ', ' ', ' ', ' ', ' ', ' ', ' ', ' ', ' ', 'B', ' ', ' ', 'B' }, { 'B', ' ', ' ', ' ', ' ', 'B', 'B', 'B', ' ', ' ', ' ', ' ', ' ', ' ', ' ', ' ', ' ', ' ', ' ', 'B' }, { 'B', ' ', ' ', ' ', ' ', ' ', ' ', ' ', ' ', ' ', ' ', ' ', ' ', ' ', ' ', ' ', 'B', ' ', ' ', 'B' }, { 'B', ' ', ' ', ' ', ' ', 'B', 'B', 'B', ' ', ' ', ' ', ' ', ' ', ' ', ' ', ' ', ' ', ' ', ' ', 'B' }, { 'B', ' ', 'E', ' ', ' ', ' ', ' ', ' ', ' ', ' ', ' ', ' ', ' ', 'E', ' ', ' ', 'B', ' ', ' ', 'B' }, { 'B', ' ', ' ', ' ', ' ', 'B', 'B', 'B', ' ', ' ', ' ', ' ', ' ', ' ', ' ', ' ', ' ', ' ', ' ', 'B' }, { 'B', ' ', ' ', ' ', ' ', ' ', ' ', ' ', ' ', ' ', ' ', ' ', ' ', ' ', ' ', ' ', 'B', ' ', ' ', 'B' }, { 'B', ' ', ' ', ' ', ' ', 'B', 'B', 'B', ' ', ' ', ' ', ' ', ' ', ' ', ' ', ' ', ' ', ' ', ' ', 'B' }, { 'B', ' ', ' ', ' ', ' ', ' ', ' ', ' ', ' ', 'P', ' ', ' ', ' ', ' ', ' ', ' ', 'B', ' ', ' ', 'B' }, { 'B', ' ', ' ', ' ', ' ', 'B', 'B', 'B', ' ', ' ', ' ', ' ', ' ', ' ', ' ', ' ', ' ', ' ', ' ', 'B' }, { 'B', ' ', ' ', ' ', ' ', ' ', ' ', ' ', ' ', ' ', ' ', ' ', ' ', ' ', ' ', ' ', 'B', ' ', ' ', 'B' }, { 'B', ' ', ' ', ' ', ' ', 'B', 'B', 'B', ' ', ' ', ' ', ' ', ' ', ' ', ' ', ' ', ' ', ' ', ' ', 'B' }, { 'B', ' ', ' ', ' ', ' ', ' ', ' ', ' ', ' ', ' ', ' ', ' ', ' ', ' ', ' ', ' ', 'B', ' ', ' ', 'B' }, { 'B', ' ', ' ', ' ', ' ', 'B', 'B', 'B', ' ', ' ', ' ', ' ', ' ', ' ', ' ', ' ', ' ', ' ', ' ', 'B' }, { 'B', ' ', ' ', ' ', ' ', ' ', ' ', ' ', ' ', ' ', ' ', ' ', ' ', ' ', ' ', ' ', 'B', ' ', ' ', 'B' }, { 'B', ' ', ' ', ' ', ' ', 'B', 'B', 'B', ' ', ' ', ' ', 'E', ' ', ' ', ' ', ' ', ' ', ' ', ' ', 'B' }, { 'B', ' ', ' ', ' ', ' ', ' ', ' ', ' ', ' ', ' ', ' ', ' ', ' ', ' ', ' ', ' ', 'B', ' ', ' ', 'B' }, { 'B', ' ', ' ', ' ', ' ', 'B', 'B', 'B', ' ', ' ', ' ', ' ', ' ', ' ', ' ', ' ', ' ', ' ', ' ', 'B' }, { 'B', 'B', 'B', 'B', 'B', 'B', 'B', 'B', 'B', 'B', 'B', 'B', 'B', 'B', 'B', 'B', 'B', 'B', 'B', 'B' }, }; char[,] mapP2 = { { 'B', 'B', 'B', 'B', 'B', 'B', 'B', 'B', 'B', 'B', 'B', 'B', 'B', 'B', 'B', 'B', 'B', 'B', 'B', 'B' }, { 'B', 'P', ' ', ' ', ' ', ' ', ' ', ' ', ' ', ' ', ' ', ' ', ' ', ' ', ' ', ' ', 'B', ' ', ' ', 'B' }, { 'B', ' ', ' ', ' ', ' ', 'B', 'B', 'B', ' ', ' ', ' ', ' ', ' ', ' ', ' ', ' ', ' ', ' ', ' ', 'B' }, { 'B', ' ', ' ', ' ', 'B', ' ', ' ', ' ', 'B', ' ', ' ', ' ', ' ', ' ', ' ', ' ', 'B', ' ', ' ', 'B' }, { 'B', ' ', ' ', ' ', ' ', 'B', 'B', 'B', ' ', ' ', 'B', ' ', 'B', ' ', ' ', ' ', ' ', ' ', ' ', 'B' }, { 'B', ' ', ' ', ' ', ' ', ' ', 'B', ' ', ' ', ' ', ' ', ' ', ' ', ' ', ' ', ' ', 'B', ' ', ' ', 'B' }, { 'B', ' ', 'E', ' ', ' ', 'B', 'B', 'B', ' ', ' ', ' ', ' ', ' ', ' ', ' ', ' ', ' ', ' ', ' ', 'B' }, { 'B', ' ', ' ', ' ', ' ', ' ', 'B', ' ', ' ', ' ', ' ', ' ', ' ', ' ', ' ', ' ', 'B', ' ', ' ', 'B' }, { 'B', ' ', ' ', ' ', ' ', 'B', 'B', 'B', ' ', ' ', ' ', ' ', ' ', ' ', ' ', ' ', ' ', ' ', ' ', 'B' }, { 'B', ' ', ' ', ' ', ' ', ' ', 'B', ' ', ' ', ' ', ' ', ' ', ' ', ' ', ' ', ' ', 'B', ' ', 'E', 'B' }, { 'B', ' ', ' ', ' ', ' ', 'B', 'B', 'B', ' ', ' ', ' ', ' ', ' ', ' ', ' ', ' ', ' ', ' ', ' ', 'B' }, { 'B', ' ', ' ', ' ', ' ', ' ', 'B', 'E', ' ', ' ', ' ', ' ', ' ', ' ', ' ', ' ', 'B', ' ', ' ', 'B' }, { 'B', ' ', ' ', ' ', ' ', 'B', 'B', 'B', ' ', ' ', ' ', ' ', ' ', ' ', ' ', ' ', ' ', ' ', ' ', 'B' }, { 'B', ' ', ' ', ' ', ' ', ' ', 'B', ' ', ' ', ' ', ' ', ' ', ' ', ' ', ' ', ' ', 'B', ' ', ' ', 'B' }, { 'B', ' ', ' ', ' ', ' ', 'B', 'B', 'B', ' ', ' ', ' ', ' ', ' ', ' ', ' ', ' ', ' ', ' ', ' ', 'B' }, { 'B', ' ', ' ', ' ', ' ', ' ', 'B', ' ', ' ', ' ', ' ', ' ', ' ', ' ', ' ', ' ', 'B', ' ', ' ', 'B' }, { 'B', ' ', ' ', ' ', ' ', 'B', 'B', 'B', ' ', ' ', ' ', ' ', ' ', ' ', ' ', ' ', ' ', ' ', ' ', 'B' }, { 'B', ' ', ' ', ' ', ' ', ' ', 'B', ' ', ' ', ' ', ' ', ' ', ' ', ' ', ' ', ' ', 'B', ' ', ' ', 'B' }, { 'B', ' ', ' ', ' ', ' ', 'B', 'B', 'B', ' ', ' ', ' ', ' ', ' ', ' ', ' ', ' ', ' ', ' ', ' ', 'B' }, { 'B', 'B', 'B', 'B', 'B', 'B', 'B', 'B', 'B', 'B', 'B', 'B', 'B', 'B', 'B', 'B', 'B', 'B', 'B', 'B' }, }; float playerY = 5; float playerX = 5; float[,] playerPos = { { playerX }, { playerY }, }; int mapScale = 10; float playerXSpeed = 0f; float playerYSpeed = 0f; float playerSpeedIncr = 0.0001f; float playerSpeedDecr = 0.0001f; bool playerLock = false; int playerStill = 0; float SpeedX = 0; float SpeedY = 0; float Xknow = 1; float Yknow = 1; int offsetX = 50; int offsetY = 50; bool collision = false; mapSelect map = mapSelect.map0; while (!Raylib.WindowShouldClose()) { //Map selector if (mapTarget == 0) { switch (mapDisplay) { case 1: map = mapSelect.map1; for (int y = 0; y < mapP1.GetLength(0); y++) { for (int x = 0; x < mapP1.GetLength(1); x++) { if (mapP1[y, x] == 'B') { mapList.Add(new Block(new Vector2(20 * x, 20 * y), new Vector2(20 * x, 20 * y))); } else if (mapP1[y, x] == 'E') { enemies.Add(new Enemy(new Vector2(offsetX + x * mapScale, offsetY + y * mapScale), new Vector2(3, 3))); } } } Console.WriteLine("map1"); break; case 2: map = mapSelect.map2; break; default: Raylib.DrawText("Text Not found.", 200, 100, 50, Color.RED); break; } mapDisplay++; mapTarget = 1; } //Drawing begins Raylib.BeginDrawing(); Raylib.ClearBackground(Color.GREEN); #region Bad code // //map writeing // for (int y = 0; y < mapP1.GetLength(0); y++) // { // for (int x = 0; x < mapP1.GetLength(1); x++) // { // if (map == mapSelect.map1) // { // //Blocks // if (mapP1[y, x] == 'B') // { // Raylib.DrawRectangle(offsetX + x * mapScale, offsetY + y * mapScale, 10, 10, Color.BLACK); // } // //Player // else if (mapP1[y, x] == 'P') // { // if (playerLock == false) // { // playerY = offsetY + y * mapScale; // playerX = offsetX + x * mapScale; // } // playerLock = true; // Raylib.DrawCircle((int)playerX + 2, (int)playerY + 2, 3, Color.RED); // } // //Enemy // else if (mapP1[y, x] == 'E') // { // //enemies.Add(new Enemy(new Vector2(offsetX + x * mapScale, offsetY + y * mapScale), new Vector2(3, 3))); // } // else // { // } // } // else if (map == mapSelect.map2) // { // //Blocks // if (mapP2[y, x] == 'B') // { // Raylib.DrawRectangle(offsetX + x * mapScale, offsetY + y * mapScale, 10, 10, Color.BLACK); // } // //Player // else if (mapP2[y, x] == 'P') // { // if (playerLock == false) // { // playerY = offsetY + y * mapScale; // playerX = offsetX + x * mapScale; // } // playerLock = true; // Raylib.DrawCircle((int)playerX + 3, (int)playerY + 3, 3, Color.RED); // } // //Enemy // else if (mapP2[y, x] == 'E') // { // Raylib.DrawCircle(offsetX + x * mapScale + 3, offsetY + y * mapScale + 3, 3, Color.YELLOW); // } // else // { // } // } // else // { // Raylib.DrawText("Map Not found.", 200, 200, 50, Color.RED); // } // } // } #endregion for (int i = 0; i < enemies.Count; i++) { enemies[i].Draw(); } for (int i = 0; i < mapList.Count; i++) { mapList[i].Draw(); } if (Raylib.IsKeyDown(KeyboardKey.KEY_A)) { playerStill = 0; playerX = playerX + playerXSpeed; if (playerXSpeed > -0.05) { playerXSpeed = playerXSpeed - playerSpeedIncr; } } else if (Raylib.IsKeyDown(KeyboardKey.KEY_D)) { playerStill = 0; playerX = playerX + playerXSpeed; if (playerXSpeed < 0.05) { playerXSpeed = playerXSpeed + playerSpeedIncr; } } else { if (playerXSpeed > 0) { playerStill++; playerX = playerX + playerXSpeed; playerXSpeed = playerXSpeed - playerSpeedDecr; if (playerStill > 1000) { playerXSpeed = 0; } } if (playerXSpeed < 0) { playerStill++; playerX = playerX + playerXSpeed; playerXSpeed = playerXSpeed + playerSpeedDecr; if (playerStill > 1000) { playerXSpeed = 0; } } } if (Raylib.IsKeyDown(KeyboardKey.KEY_S)) { playerStill = 0; playerY = playerY + playerYSpeed; if (playerYSpeed < 0.05) { playerYSpeed = playerYSpeed + playerSpeedIncr; } } else if (Raylib.IsKeyDown(KeyboardKey.KEY_W)) { playerStill = 0; playerY = playerY + playerYSpeed; if (playerYSpeed > -0.05) { playerYSpeed = playerYSpeed - playerSpeedIncr; } } else { if (playerYSpeed > 0) { playerStill++; playerY = playerY + playerYSpeed; playerYSpeed = playerYSpeed - playerSpeedDecr; if (playerStill > 1000) { playerYSpeed = 0; } } if (playerYSpeed < 0) { playerStill++; playerY = playerY + playerYSpeed; playerYSpeed = playerYSpeed + playerSpeedDecr; if (playerStill > 1000) { playerYSpeed = 0; } } } //Sjukta if (Raylib.IsKeyDown(KeyboardKey.KEY_UP)) { SpeedY = -0.5f; Yknow = playerY - 3 + SpeedY; Xknow = playerX + 2; SpeedX = 0; } else if (Raylib.IsKeyDown(KeyboardKey.KEY_DOWN)) { SpeedY = 0.5f; Yknow = playerY + 7 + SpeedY; Xknow = playerX + 2; SpeedX = 0; } else if (Raylib.IsKeyDown(KeyboardKey.KEY_RIGHT)) { SpeedX = 0.5f; Xknow = playerX + 7 + SpeedX; Yknow = playerY + 2; SpeedY = 0; } else if (Raylib.IsKeyDown(KeyboardKey.KEY_LEFT)) { SpeedX = -0.5f; Xknow = playerX - 3 + SpeedX; Yknow = playerY + 2; SpeedY = 0; } Xknow = Xknow + SpeedX; Yknow = Yknow + SpeedY; Raylib.DrawCircle((int)Xknow, (int)Yknow, 2, Color.ORANGE); //Reload if (Raylib.IsKeyDown(KeyboardKey.KEY_ENTER)) { mapTarget = 0; playerLock = false; playerXSpeed = 0; playerYSpeed = 0; playerX = 0; playerY = 0; } Raylib.EndDrawing(); } }