clean up, bugfixes and snes controller
This commit is contained in:
parent
014a843268
commit
b960445e1f
219
RPI_Matrix.cs
219
RPI_Matrix.cs
|
@ -1,9 +1,20 @@
|
|||
using System;
|
||||
using System.IO;
|
||||
using System.Threading;
|
||||
using rpi_rgb_led_matrix_sharp;
|
||||
|
||||
namespace RPI_Matrix {
|
||||
public static class RPI_Matrix {
|
||||
private static bool hasSelected = false;
|
||||
private static int selectionIndex = 0;
|
||||
private static bool selection = true;
|
||||
private static bool isInGame = false;
|
||||
private static bool isTetris = false;
|
||||
private static bool isFlappy = false;
|
||||
private static bool isSnake = false;
|
||||
private static int keypressFrame = 0;
|
||||
private static int frameCount = 0;
|
||||
|
||||
public static void Main() {
|
||||
RGBLedMatrix matrix = new(
|
||||
new RGBLedMatrixOptions {
|
||||
|
@ -21,51 +32,74 @@ namespace RPI_Matrix {
|
|||
SnakeGame.SnakeGame.Init(matrix, canvas);
|
||||
FlappyBird.FlappyBird.Init(matrix, canvas);
|
||||
Tetris.Tetris.Init(matrix, canvas);
|
||||
|
||||
|
||||
(new Thread(InterpretGamepadInput)).Start();
|
||||
|
||||
RGBLedFont font = new("fonts/5x8.bdf");
|
||||
Color col = new(255, 255, 255);
|
||||
|
||||
bool startover = true;
|
||||
while (startover) {
|
||||
while (true) {
|
||||
Console.Clear();
|
||||
canvas.Clear();
|
||||
canvas.DrawText(font, 0, 8, col, "Spielauswahl:");
|
||||
canvas.DrawText(font, 0, 24, col, "0) Beenden");
|
||||
canvas.DrawText(font, 0, 32, col, "1) SnakeGame");
|
||||
canvas.DrawText(font, 0, 40, col, "2) FlappyBird");
|
||||
canvas.DrawText(font, 0, 48, col, "3) Tetris");
|
||||
canvas = matrix.SwapOnVsync(canvas);
|
||||
|
||||
bool selection = true;
|
||||
int frameCount = 0, keypressFrame = 0;
|
||||
selection = true;
|
||||
while (selection) {
|
||||
canvas.Clear();
|
||||
canvas.DrawText(font, 0, 8, col, "Spielauswahl:");
|
||||
canvas.DrawText(font, 0, 24, col, " ) SnakeGame");
|
||||
canvas.DrawText(font, 0, 32, col, " ) FlappyBird");
|
||||
canvas.DrawText(font, 0, 40, col, " ) Tetris");
|
||||
canvas.DrawText(font, 0, 56, col, " ) Beenden");
|
||||
int nx = selectionIndex + ((selectionIndex == 3) ? 1 : 0);
|
||||
canvas.DrawText(font, 0, 24 + nx * 8, col, "#");
|
||||
canvas = matrix.SwapOnVsync(canvas);
|
||||
|
||||
// Handle key presses for selecting a game
|
||||
if (Console.KeyAvailable) {
|
||||
keypressFrame = frameCount;
|
||||
switch (Console.ReadKey(true).Key) {
|
||||
case ConsoleKey.D0:
|
||||
selection = false;
|
||||
startover = false;
|
||||
case ConsoleKey.Escape:
|
||||
return;
|
||||
case ConsoleKey.UpArrow:
|
||||
if (!isInGame && selectionIndex > 0)
|
||||
selectionIndex--;
|
||||
break;
|
||||
case ConsoleKey.D1:
|
||||
selection = false;
|
||||
SnakeGame.SnakeGame.Main(new[] { "-s" });
|
||||
case ConsoleKey.DownArrow:
|
||||
if (!isInGame && selectionIndex < 3)
|
||||
selectionIndex++;
|
||||
break;
|
||||
case ConsoleKey.D2:
|
||||
selection = false;
|
||||
FlappyBird.FlappyBird.Main();
|
||||
case ConsoleKey.Enter:
|
||||
if (!isInGame)
|
||||
hasSelected = true;
|
||||
break;
|
||||
case ConsoleKey.D3:
|
||||
selection = false;
|
||||
Tetris.Tetris.Main();
|
||||
}
|
||||
}
|
||||
|
||||
if (hasSelected) {
|
||||
hasSelected = false;
|
||||
switch (selectionIndex) {
|
||||
case 0:
|
||||
playSnakeGame("-s");
|
||||
break;
|
||||
case 1:
|
||||
playFlappyBird();
|
||||
break;
|
||||
case 2:
|
||||
playTetris();
|
||||
break;
|
||||
case 3:
|
||||
Environment.Exit(0);
|
||||
break;
|
||||
}
|
||||
}
|
||||
|
||||
isInGame = false;
|
||||
isTetris = false;
|
||||
isFlappy = false;
|
||||
isSnake = false;
|
||||
|
||||
if (frameCount >= keypressFrame + 150) {
|
||||
selection = false;
|
||||
keypressFrame = frameCount;
|
||||
SnakeGame.SnakeGame.Main(new[] { "-b" });
|
||||
playSnakeGame("-b");
|
||||
}
|
||||
|
||||
Thread.Sleep(100);
|
||||
|
@ -73,5 +107,138 @@ namespace RPI_Matrix {
|
|||
}
|
||||
}
|
||||
}
|
||||
|
||||
private static void playSnakeGame(string arg) {
|
||||
isSnake = true;
|
||||
isInGame = true;
|
||||
selection = false;
|
||||
SnakeGame.SnakeGame.Main(new[] { arg });
|
||||
}
|
||||
|
||||
private static void playFlappyBird() {
|
||||
isFlappy = true;
|
||||
isInGame = true;
|
||||
selection = false;
|
||||
FlappyBird.FlappyBird.Main();
|
||||
}
|
||||
|
||||
private static void playTetris() {
|
||||
isTetris = true;
|
||||
isInGame = true;
|
||||
selection = false;
|
||||
Tetris.Tetris.Main();
|
||||
}
|
||||
|
||||
private static void InterpretGamepadInput() {
|
||||
FileInfo targetFile = new FileInfo("/dev/input/js0");
|
||||
using FileStream fs = targetFile.Open(FileMode.Open, FileAccess.Read, FileShare.ReadWrite);
|
||||
byte[] buffer = new byte[1024];
|
||||
while (fs.Read(buffer) > 0) {
|
||||
// Console.SetCursorPosition(0, 1);
|
||||
keypressFrame = frameCount;
|
||||
if (isTetris && Tetris.Tetris.selection)
|
||||
Tetris.Tetris.frameCount = 0;
|
||||
else if (isSnake && !SnakeGame.SnakeGame.gameOver)
|
||||
SnakeGame.SnakeGame.keypressFrame = SnakeGame.SnakeGame.frameCount;
|
||||
switch (BitConverter.ToString(buffer, 4, 4)) {
|
||||
case "01-00-01-00":
|
||||
// X-Button
|
||||
// Console.WriteLine("Pressed Button 'X' ");
|
||||
if (isTetris)
|
||||
Tetris.Tetris.swapMemory();
|
||||
break;
|
||||
case "01-00-01-01":
|
||||
// A-Button
|
||||
// Console.WriteLine("Pressed Button 'A' ");
|
||||
if (!isInGame)
|
||||
hasSelected = true;
|
||||
else if (isTetris && Tetris.Tetris.selection)
|
||||
Tetris.Tetris.enterSelection();
|
||||
break;
|
||||
case "01-00-01-02":
|
||||
// B-Button
|
||||
// Console.WriteLine("Pressed Button 'B' ");
|
||||
if (isFlappy) {
|
||||
if (FlappyBird.FlappyBird.isReady)
|
||||
FlappyBird.FlappyBird.JumpOnce();
|
||||
else
|
||||
FlappyBird.FlappyBird.isReady = true;
|
||||
} else if (isTetris)
|
||||
Tetris.Tetris.placeDownBlock();
|
||||
break;
|
||||
case "01-00-01-04":
|
||||
// L-Button
|
||||
// Console.WriteLine("Pressed Button 'L' ");
|
||||
if (isTetris) {
|
||||
Tetris.Tetris.calcBounds();
|
||||
Tetris.Tetris.rotateCounterClockwise();
|
||||
Tetris.Tetris.adjustXPos();
|
||||
}
|
||||
break;
|
||||
case "01-00-01-05":
|
||||
// R-Button
|
||||
// Console.WriteLine("Pressed Button 'R' ");
|
||||
if (isTetris) {
|
||||
Tetris.Tetris.calcBounds();
|
||||
Tetris.Tetris.rotateClockwise();
|
||||
Tetris.Tetris.adjustXPos();
|
||||
}
|
||||
break;
|
||||
case "01-00-01-09":
|
||||
// Start-Button
|
||||
// Console.WriteLine("Pressed Button 'Start' ");
|
||||
if (isSnake)
|
||||
SnakeGame.SnakeGame.EndGame();
|
||||
else if (isFlappy) {
|
||||
if (!FlappyBird.FlappyBird.isReady)
|
||||
FlappyBird.FlappyBird.stopPlaying = true;
|
||||
else
|
||||
FlappyBird.FlappyBird.EndGame();
|
||||
} else if (isTetris)
|
||||
Tetris.Tetris.EndGame();
|
||||
break;
|
||||
case "01-80-02-01":
|
||||
// Arrow-Up
|
||||
// Console.WriteLine("Pressed 'Arrow-Up' ");
|
||||
if (!isInGame && selectionIndex > 0)
|
||||
selectionIndex--;
|
||||
else if (isSnake)
|
||||
SnakeGame.SnakeGame.SteerUp(SnakeGame.SnakeGame.self);
|
||||
else if (isTetris)
|
||||
if (Tetris.Tetris.selection && Tetris.Tetris.selectionIndex > 0)
|
||||
Tetris.Tetris.selectionIndex--;
|
||||
break;
|
||||
case "FF-7F-02-01":
|
||||
// Arrow-Down
|
||||
// Console.WriteLine("Pressed 'Arrow-Down' ");
|
||||
if (!isInGame && selectionIndex < 3)
|
||||
selectionIndex++;
|
||||
else if (isSnake)
|
||||
SnakeGame.SnakeGame.SteerDown(SnakeGame.SnakeGame.self);
|
||||
else if (isTetris)
|
||||
if (Tetris.Tetris.selection && Tetris.Tetris.selectionIndex < 1)
|
||||
Tetris.Tetris.selectionIndex++;
|
||||
else
|
||||
Tetris.Tetris.moveDownOnce();
|
||||
break;
|
||||
case "01-80-02-00":
|
||||
// Arrow-Left
|
||||
// Console.WriteLine("Pressed 'Arrow-Left' ");
|
||||
if (isSnake)
|
||||
SnakeGame.SnakeGame.SteerLeft(SnakeGame.SnakeGame.self);
|
||||
else if (isTetris)
|
||||
Tetris.Tetris.moveLeftSide();
|
||||
break;
|
||||
case "FF-7F-02-00":
|
||||
// Arrow-Right
|
||||
// Console.WriteLine("Pressed 'Arrow-Right' ");
|
||||
if (isSnake)
|
||||
SnakeGame.SnakeGame.SteerRight(SnakeGame.SnakeGame.self);
|
||||
else if (isTetris)
|
||||
Tetris.Tetris.moveRightSide();
|
||||
break;
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
Loading…
Reference in New Issue
Block a user