4 kişilik, patlayıp genişleyerek haritayı ele geçirme oyunu
This commit is contained in:
@@ -19,7 +19,7 @@
|
|||||||
- [ ] Online multiplayer
|
- [ ] Online multiplayer
|
||||||
|
|
||||||
+ Snake
|
+ Snake
|
||||||
|
+ Explode(?)
|
||||||
|
|
||||||
## Planned
|
## Planned
|
||||||
|
|
||||||
|
|||||||
8
explode/Makefile
Normal file
8
explode/Makefile
Normal file
@@ -0,0 +1,8 @@
|
|||||||
|
# Makefile template, copy and remove comments
|
||||||
|
|
||||||
|
SRC := ../util.c explode.c
|
||||||
|
OUT := ../bin/explode
|
||||||
|
LIBS := -lraylib -lGL -lm -lpthread -ldl -lrt -lX11
|
||||||
|
|
||||||
|
make all:
|
||||||
|
gcc $(SRC) -o $(OUT) $(LIBS)
|
||||||
128
explode/explode.c
Normal file
128
explode/explode.c
Normal file
@@ -0,0 +1,128 @@
|
|||||||
|
#include <raylib.h>
|
||||||
|
#include <stdlib.h>
|
||||||
|
#include <stdio.h>
|
||||||
|
|
||||||
|
const int WindowHeight = 600;
|
||||||
|
const int WindowWidth = 800;
|
||||||
|
|
||||||
|
int rows;
|
||||||
|
int cols;
|
||||||
|
int cellSize;
|
||||||
|
|
||||||
|
enum color {
|
||||||
|
red, blue, green, violet, black
|
||||||
|
};
|
||||||
|
|
||||||
|
typedef char byte;
|
||||||
|
typedef struct Tile {
|
||||||
|
byte number;
|
||||||
|
enum color color;
|
||||||
|
} Tile;
|
||||||
|
|
||||||
|
Tile* board;
|
||||||
|
|
||||||
|
Color colorFromEnum(enum color c){
|
||||||
|
switch(c){
|
||||||
|
case red:
|
||||||
|
return RED;
|
||||||
|
break;
|
||||||
|
case blue:
|
||||||
|
return BLUE;
|
||||||
|
break;
|
||||||
|
case green:
|
||||||
|
return GREEN;
|
||||||
|
break;
|
||||||
|
case violet:
|
||||||
|
return VIOLET;
|
||||||
|
break;
|
||||||
|
case black:
|
||||||
|
default:
|
||||||
|
return BLACK;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
void drawBoard(){
|
||||||
|
int ymax = cols * cellSize;
|
||||||
|
int xmax = rows * cellSize;
|
||||||
|
int offset = 2;
|
||||||
|
for (int i = 1; i <= rows; i++){
|
||||||
|
DrawLine(i * cellSize, 0, i * cellSize, ymax, BLACK);
|
||||||
|
}
|
||||||
|
for (int j = 1; j <= cols; j++){
|
||||||
|
DrawLine(0 , j * cellSize, xmax, j * cellSize, BLACK);
|
||||||
|
}
|
||||||
|
for (int i = 0; i < rows; i++){
|
||||||
|
for (int j = 0; j < cols; j++){
|
||||||
|
char text[16];
|
||||||
|
Tile tile = board[i * cols + j];
|
||||||
|
snprintf(text, 16, "%d", tile.number);
|
||||||
|
DrawText(text, j * cellSize + offset, i * cellSize + offset, cellSize - 2 * offset, colorFromEnum(tile.color));
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
int selectTile(int x, int y){
|
||||||
|
int r = y / cellSize;
|
||||||
|
int c = x / cellSize;
|
||||||
|
return r * cols + c;
|
||||||
|
}
|
||||||
|
|
||||||
|
void explode(int r, int c, enum color color){
|
||||||
|
int index = r * cols + c;
|
||||||
|
board[index].number++;
|
||||||
|
board[index].color = color;
|
||||||
|
if (board[index].number > 3){
|
||||||
|
board[index].number = 0;
|
||||||
|
board[index].color = black;
|
||||||
|
if (r > 0) explode(r - 1, c, color);
|
||||||
|
if (r < rows - 1) explode(r + 1, c, color);
|
||||||
|
if (c > 0) explode(r, c - 1, color);
|
||||||
|
if (c < cols - 1) explode(r, c + 1, color);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
int main(){
|
||||||
|
InitWindow(WindowHeight, WindowWidth, "Explode");
|
||||||
|
rows = cols = 6;
|
||||||
|
cellSize = 60;
|
||||||
|
board = (Tile*) calloc(sizeof(Tile), rows * cols);
|
||||||
|
|
||||||
|
Color turns[] = {RED, BLUE, GREEN, VIOLET};
|
||||||
|
int alive[] = {1, 1, 1, 1};
|
||||||
|
int turn_index = 0;
|
||||||
|
for (int i = 0; i < rows * cols; i++){
|
||||||
|
board[i].color = black;
|
||||||
|
}
|
||||||
|
|
||||||
|
board[1 + 1 * cols].color = red;
|
||||||
|
board[1 + 4 * cols].color = blue;
|
||||||
|
board[4 + 1 * cols].color = green;
|
||||||
|
board[4 + 4 * cols].color = violet;
|
||||||
|
|
||||||
|
while (!WindowShouldClose()){
|
||||||
|
BeginDrawing();
|
||||||
|
ClearBackground(WHITE);
|
||||||
|
drawBoard();
|
||||||
|
if (!alive[turn_index]){
|
||||||
|
turn_index = (turn_index + 1) % 4;
|
||||||
|
}
|
||||||
|
if (IsMouseButtonPressed(MOUSE_LEFT_BUTTON)){
|
||||||
|
int index = selectTile(GetMouseX(), GetMouseY());
|
||||||
|
if (index < rows * cols && ColorIsEqual(colorFromEnum(board[index].color), turns[turn_index])){
|
||||||
|
explode(index / cols, index % cols, board[index].color);
|
||||||
|
int number_sums[] = {0, 0, 0, 0};
|
||||||
|
for (int i = 0; i < rows * cols; i++){
|
||||||
|
number_sums[board[i].color]++;
|
||||||
|
}
|
||||||
|
for (int i = 0; i < 4; i++){
|
||||||
|
if (number_sums[i] == 0){
|
||||||
|
alive[i] = 0;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
turn_index = (turn_index + 1) % 4;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
EndDrawing();
|
||||||
|
}
|
||||||
|
free(board);
|
||||||
|
}
|
||||||
Reference in New Issue
Block a user