Compare commits
8 Commits
926d3873e4
...
1.0.2
Author | SHA1 | Date | |
---|---|---|---|
b7a53bdb43 | |||
7700d4fdb0 | |||
1ebdd68873 | |||
ab4ddaf365 | |||
8ddf1ad110 | |||
a2ec2614ac | |||
c5af2046e2 | |||
daf638d060 |
29
.drone.yml
Normal file
29
.drone.yml
Normal file
@@ -0,0 +1,29 @@
|
||||
kind: pipeline
|
||||
name: mazegame_compiler
|
||||
type: docker
|
||||
steps:
|
||||
- name: compile main.c
|
||||
description: Check if the code is compiling
|
||||
image: alpine
|
||||
#install make and gcc
|
||||
commands:
|
||||
- apk add build-base ncurses-dev ncurses ncurses-terminfo ncurses-static g++
|
||||
- mkdir build
|
||||
- gcc -static -o build/main_static_alpine main.c -l:libncurses.so
|
||||
- gcc -o build/main_dynamic main.c -lncurses
|
||||
artifacts:
|
||||
- name: compiled_static
|
||||
path: build/main_static_alpine
|
||||
type: file
|
||||
- name: compiled_dynamic
|
||||
path: build/main_dynamic
|
||||
type: file
|
||||
- name: gitea_release
|
||||
image: plugins/gitea-release
|
||||
settings:
|
||||
api_key:
|
||||
from_secret: gitea_api_key
|
||||
base_url: https://brn.systems:3000
|
||||
files: build/*
|
||||
when:
|
||||
event: tag
|
4
.vscode/tasks.json
vendored
4
.vscode/tasks.json
vendored
@@ -13,13 +13,15 @@
|
||||
],
|
||||
"command": "/usr/bin/gcc",
|
||||
"args": [
|
||||
"-static",
|
||||
"-fdiagnostics-color=always",
|
||||
"-g",
|
||||
"${workspaceFolder}/main.c",
|
||||
"-o",
|
||||
//include ncurses
|
||||
"${fileDirname}/${fileBasenameNoExtension}",
|
||||
"-lncurses"
|
||||
"-lncurses",
|
||||
"-ltinfo"
|
||||
],
|
||||
"options": {
|
||||
"cwd": "${fileDirname}"
|
||||
|
118
main.c
118
main.c
@@ -1,10 +1,17 @@
|
||||
#include <stdio.h>
|
||||
|
||||
#include <stdlib.h>
|
||||
|
||||
#include <time.h>
|
||||
|
||||
#include <stdint.h>
|
||||
|
||||
#include <ncurses.h>
|
||||
|
||||
#include <unistd.h>
|
||||
|
||||
#include <math.h>
|
||||
|
||||
uint16_t Hole_Div = 40;
|
||||
uint16_t SCR_X;
|
||||
uint16_t SCR_Y;
|
||||
@@ -13,15 +20,12 @@ char blank_char = 32;
|
||||
char wall_char = 35;
|
||||
char goal_char = 71;
|
||||
char player_char = 80;
|
||||
char bullet_char = 120;
|
||||
char inchar = ' ';
|
||||
uint16_t blank_color = 0;
|
||||
uint16_t wall_color = 1;
|
||||
uint16_t goal_color = 2;
|
||||
uint16_t player_color = 3;
|
||||
uint16_t border_color = 4;
|
||||
uint16_t bullet1_color = 5;
|
||||
uint16_t bullet2_color = 5;
|
||||
char letter = ' ';
|
||||
struct Object {
|
||||
uint16_t x;
|
||||
@@ -30,13 +34,6 @@ struct Object {
|
||||
uint16_t color;
|
||||
uint8_t dir;
|
||||
};
|
||||
struct Bullet {
|
||||
uint16_t x;
|
||||
uint16_t y;
|
||||
uint8_t dir;
|
||||
uint8_t color;
|
||||
};
|
||||
uint16_t bulletptr = 0;
|
||||
uint16_t player_x = 0;
|
||||
uint16_t player_y = 0;
|
||||
uint16_t goal_x = 0;
|
||||
@@ -44,30 +41,21 @@ uint16_t goal_y = 0;
|
||||
uint16_t rng_tmp = 0;
|
||||
uint16_t orient = 0;
|
||||
uint16_t inputs_tmp = 0;
|
||||
|
||||
struct Object * rendered;
|
||||
struct Bullet *bullets;
|
||||
char * playfield;
|
||||
|
||||
|
||||
int randomInt(int lower, int upper) {
|
||||
return rand() % (upper - lower + 1) + lower;
|
||||
}
|
||||
|
||||
void generate_maze() {
|
||||
//fill playfield with blank
|
||||
for (uint16_t y = 0; y < SCR_Y; y++) {
|
||||
for (uint16_t x = 0; x < SCR_X; x++) {
|
||||
//playfield[y][x] = blank_char;
|
||||
//do it in one dimension
|
||||
playfield[y * SCR_X + x] = blank_char;
|
||||
}
|
||||
}
|
||||
//fill every other row with walls
|
||||
for (uint16_t y = 0; y < SCR_Y; y += 2) {
|
||||
for (uint16_t x = 0; x < SCR_X; x++) {
|
||||
//playfield[y][x] = wall_char;
|
||||
//do it in one dimension
|
||||
playfield[y * SCR_X + x] = wall_char;
|
||||
}
|
||||
}
|
||||
@@ -76,51 +64,43 @@ void generate_maze(){
|
||||
//punch holes in the walls depending on the SCR_X
|
||||
for (uint16_t ix = 0; ix < ((SCR_X - (SCR_X % Hole_Div)) / Hole_Div); ix += 1) {
|
||||
rng_tmp = randomInt(1, SCR_X);
|
||||
//playfield[y][rng_tmp] = blank_char;
|
||||
//do it in one dimension
|
||||
|
||||
playfield[y * SCR_X + rng_tmp] = blank_char;
|
||||
}
|
||||
if (orient == 0) {
|
||||
if (y == 0) {
|
||||
//playfield[y][rng_tmp] = goal_char;
|
||||
//do it in one dimension
|
||||
|
||||
playfield[y * SCR_X + rng_tmp] = goal_char;
|
||||
goal_x = rng_tmp;
|
||||
goal_y = y;
|
||||
}
|
||||
if (y == SCR_Y - 1) {
|
||||
//playfield[y][rng_tmp] = player_char;
|
||||
//do it in one dimension
|
||||
|
||||
playfield[y * SCR_X + rng_tmp] = player_char;
|
||||
player_x = rng_tmp;
|
||||
player_y = y;
|
||||
}
|
||||
} else {
|
||||
if (y == SCR_Y - 1) {
|
||||
//playfield[y][rng_tmp] = goal_char;
|
||||
//do it in one dimension
|
||||
|
||||
playfield[y * SCR_X + rng_tmp] = goal_char;
|
||||
goal_x = rng_tmp;
|
||||
goal_y = y;
|
||||
}
|
||||
if (y == 0) {
|
||||
//playfield[y][rng_tmp] = player_char;
|
||||
//do it in one dimension
|
||||
|
||||
playfield[y * SCR_X + rng_tmp] = player_char;
|
||||
player_x = rng_tmp;
|
||||
player_y = y;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
void render_maze() {
|
||||
//fill rendered with blank
|
||||
for (uint16_t y = 0; y < SCR_Y; y++) {
|
||||
for (uint16_t x = 0; x < SCR_X; x++) {
|
||||
//rendered[y][x] = blank_char;
|
||||
//do it in one dimension
|
||||
|
||||
rendered[y * SCR_X + x].letter = blank_char;
|
||||
rendered[y * SCR_X + x].color = blank_color;
|
||||
rendered[y * SCR_X + x].x = x;
|
||||
@@ -129,70 +109,49 @@ void render_maze(){
|
||||
}
|
||||
for (uint16_t y = 0; y < SCR_Y; y++) {
|
||||
for (uint16_t x = 0; x < SCR_X; x++) {
|
||||
//letter = playfield[y - 1][x- 1];
|
||||
//do it in one dimension
|
||||
|
||||
letter = playfield[(y) * SCR_X + (x)];
|
||||
//rendered[x][y].letter = letter;
|
||||
//do it in one dimension
|
||||
|
||||
rendered[(y) * SCR_X + (x)].letter = letter;
|
||||
//rendered[x][y].x = x;
|
||||
//do it in one dimension
|
||||
|
||||
rendered[(y) * SCR_X + (x)].x = x;
|
||||
//rendered[x][y].y = y;
|
||||
//do it in one dimension
|
||||
|
||||
rendered[(y) * SCR_X + (x)].y = y;
|
||||
if (letter == goal_char) {
|
||||
//rendered[x][y].color = goal_color;
|
||||
//do it in one dimension
|
||||
|
||||
rendered[(y) * SCR_X + (x)].color = goal_color;
|
||||
}
|
||||
else if (letter == player_char){
|
||||
//rendered[x][y].color = player_color;
|
||||
//do it in one dimension
|
||||
} else if (letter == player_char) {
|
||||
|
||||
rendered[(y) * SCR_X + (x)].color = player_color;
|
||||
}
|
||||
else if (letter == blank_char){
|
||||
//rendered[x][y].color = blank_color;
|
||||
//do it in one dimension
|
||||
} else if (letter == blank_char) {
|
||||
|
||||
rendered[(y) * SCR_X + (x)].color = blank_color;
|
||||
}
|
||||
else if (letter == wall_char){
|
||||
//rendered[x][y].color = wall_color;
|
||||
//do it in one dimension
|
||||
} else if (letter == wall_char) {
|
||||
|
||||
rendered[(y) * SCR_X + (x)].color = wall_color;
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
void draw_maze() {
|
||||
//FILE *fp;
|
||||
//fp = fopen("logx", "w");
|
||||
for (uint16_t y = 0; y < SCR_Y; y++) {
|
||||
for (uint16_t x = 0; x < SCR_X; x++) {
|
||||
//attron(COLOR_PAIR(rendered[x][y].color));
|
||||
//do it in one dimension
|
||||
|
||||
attron(COLOR_PAIR(rendered[(y) * SCR_X + (x)].color));
|
||||
//mvaddch(y, x, rendered[x][y].letter);
|
||||
//do it in one dimension
|
||||
|
||||
mvaddch(y, x, rendered[(y) * SCR_X + (x)].letter);
|
||||
//fprintf(fp, "%c, x:%d y:%d\n", rendered[(y)*SCR_X + (x)].letter, rendered[(y)*SCR_X + (x)].x, rendered[(y)*SCR_X + (x)].y);
|
||||
//attroff(COLOR_PAIR(rendered[x][y].color));
|
||||
//do it in one dimension
|
||||
|
||||
attroff(COLOR_PAIR(rendered[(y) * SCR_X + (x)].color));
|
||||
}
|
||||
}
|
||||
//fclose(fp);
|
||||
refresh();
|
||||
}
|
||||
|
||||
void init() {
|
||||
initscr();
|
||||
//get screen size
|
||||
getmaxyx(stdscr, SCR_Y, SCR_X);
|
||||
playfield = malloc(sizeof(char) * SCR_Y * SCR_X);
|
||||
rendered = malloc(sizeof(struct Object) * (SCR_X) * (SCR_Y));
|
||||
bullets = malloc(sizeof(struct Bullet) * (SCR_X) * (SCR_Y));
|
||||
noecho();
|
||||
nodelay(stdscr, TRUE);
|
||||
start_color();
|
||||
@@ -201,13 +160,10 @@ void init(){
|
||||
init_pair(goal_color, COLOR_BLACK, COLOR_GREEN);
|
||||
init_pair(player_color, COLOR_BLACK, COLOR_YELLOW);
|
||||
init_pair(border_color, COLOR_WHITE, COLOR_BLUE);
|
||||
init_pair(bullet1_color, COLOR_BLACK, COLOR_YELLOW);
|
||||
init_pair(bullet2_color, COLOR_BLACK, COLOR_GREEN);
|
||||
attron(COLOR_PAIR(blank_color));
|
||||
clear();
|
||||
srand(time(NULL));
|
||||
}
|
||||
|
||||
int keyinput() {
|
||||
inchar = getch();
|
||||
if (inchar == 'q') {
|
||||
@@ -216,12 +172,10 @@ int keyinput(){
|
||||
if (inchar == 'w') {
|
||||
//if (playfield[player_y - 1][player_x] == blank_char){
|
||||
if (player_y > 0 && playfield[(player_y - 1) * SCR_X + player_x] == blank_char) {
|
||||
//playfield[player_y][player_x] = blank_char;
|
||||
//do it in one dimension
|
||||
|
||||
playfield[(player_y) * SCR_X + player_x] = blank_char;
|
||||
player_y--;
|
||||
//playfield[player_y][player_x] = player_char;
|
||||
//do it in one dimension
|
||||
|
||||
playfield[(player_y) * SCR_X + player_x] = player_char;
|
||||
//}else if (playfield[player_y - 1][player_x] == goal_char){
|
||||
} else if (playfield[(player_y - 1) * SCR_X + player_x] == goal_char) {
|
||||
@@ -231,12 +185,10 @@ int keyinput(){
|
||||
if (inchar == 'a') {
|
||||
//if (playfield[player_y][player_x - 1] == blank_char){
|
||||
if (player_x > 0 && playfield[(player_y) * SCR_X + (player_x - 1)] == blank_char) {
|
||||
//playfield[player_y][player_x] = blank_char;
|
||||
//do it in one dimension
|
||||
|
||||
playfield[(player_y) * SCR_X + player_x] = blank_char;
|
||||
player_x--;
|
||||
//playfield[player_y][player_x] = player_char;
|
||||
//do it in one dimension
|
||||
|
||||
playfield[(player_y) * SCR_X + player_x] = player_char;
|
||||
}
|
||||
//else if (playfield[player_y][player_x - 1] == goal_char){
|
||||
@@ -247,10 +199,8 @@ int keyinput(){
|
||||
if (inchar == 's') {
|
||||
//if (playfield[player_y + 1][player_x] == blank_char){
|
||||
if (player_x < SCR_X - 1 && playfield[(player_y + 1) * SCR_X + player_x] == blank_char) {
|
||||
// playfield[player_y][player_x] = blank_char;
|
||||
playfield[(player_y) * SCR_X + player_x] = blank_char;
|
||||
player_y++;
|
||||
// playfield[player_y][player_x] = player_char;
|
||||
playfield[(player_y) * SCR_X + player_x] = player_char;
|
||||
// }else if (playfield[player_y + 1][player_x] == goal_char){
|
||||
} else if (playfield[(player_y + 1) * SCR_X + player_x] == goal_char) {
|
||||
@@ -261,10 +211,8 @@ int keyinput(){
|
||||
if (inchar == 'd') {
|
||||
// if (playfield[player_y][player_x + 1] == blank_char){
|
||||
if (player_x < SCR_X - 1 && playfield[(player_y) * SCR_X + (player_x + 1)] == blank_char) {
|
||||
//playfield[player_y][player_x] = blank_char;
|
||||
playfield[(player_y) * SCR_X + player_x] = blank_char;
|
||||
player_x++;
|
||||
//playfield[player_y][player_x] = player_char;
|
||||
playfield[(player_y) * SCR_X + player_x] = player_char;
|
||||
}
|
||||
//else if (playfield[player_y][player_x + 1] == goal_char){
|
||||
@@ -273,7 +221,6 @@ int keyinput(){
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
int main(int argc, char * argv[]) {
|
||||
init();
|
||||
//parse the command line arguments for width and height
|
||||
@@ -292,8 +239,7 @@ int main(int argc, char *argv[]){
|
||||
generate_maze();
|
||||
render_maze();
|
||||
draw_maze();
|
||||
while (1)
|
||||
{
|
||||
while (1) {
|
||||
inputs_tmp = keyinput();
|
||||
if (inputs_tmp == 1) {
|
||||
break;
|
||||
|
Reference in New Issue
Block a user