First commit
This commit is contained in:
commit
7500e749f8
1
.gitignore
vendored
Normal file
1
.gitignore
vendored
Normal file
@ -0,0 +1 @@
|
|||||||
|
cartridge
|
34
Makefile
Normal file
34
Makefile
Normal file
@ -0,0 +1,34 @@
|
|||||||
|
PREFIX=/usr
|
||||||
|
|
||||||
|
#OBJS specifies which files to compile as part of the project
|
||||||
|
OBJS = main.c
|
||||||
|
|
||||||
|
#CC specifies which compiler to use
|
||||||
|
CC = clang
|
||||||
|
|
||||||
|
#COMPILER_FLAGS specifies the additional compilation options we're using
|
||||||
|
# -w suppress all warnings
|
||||||
|
COMPILER_FLAGS = -Wall
|
||||||
|
|
||||||
|
#LINKER_FLAGS specifies the libraries we're linking against
|
||||||
|
LINKER_FLAGS = -lncurses
|
||||||
|
|
||||||
|
#OBJ_NAME specifies the name of our executable
|
||||||
|
OBJ_NAME=cartridge
|
||||||
|
|
||||||
|
#This is the target that compiles our executable
|
||||||
|
all : $(OBJS)
|
||||||
|
$(CC) $(OBJS) $(COMPILER_FLAGS) $(LINKER_FLAGS) -o $(OBJ_NAME)
|
||||||
|
install :
|
||||||
|
mkdir -p ${PREFIX}/share/tuxc
|
||||||
|
cp tuxc ${PREFIX}/share/tuxc/
|
||||||
|
cp -R package_managers ${PREFIX}/share/tuxc/
|
||||||
|
ln -si ${PREFIX}/share/tuxc/tuxc ${PREFIX}/bin/tux
|
||||||
|
uninstall :
|
||||||
|
rm ${PREFIX}/bin/tux
|
||||||
|
rm -r ${PREFIX}/share/tuxc/package_managers
|
||||||
|
rm ${PREFIX}/share/tuxc/tuxc
|
||||||
|
rm -r ${PREFIX}/share/tuxc
|
||||||
|
clean :
|
||||||
|
rm tuxc
|
||||||
|
|
202
main.c
Normal file
202
main.c
Normal file
@ -0,0 +1,202 @@
|
|||||||
|
#include <stdlib.h>
|
||||||
|
#include <ncurses.h>
|
||||||
|
#include <unistd.h>
|
||||||
|
#include <stdbool.h>
|
||||||
|
#define SCREENWIDTH 15
|
||||||
|
#define SCREENHEIGHT 15
|
||||||
|
|
||||||
|
typedef struct
|
||||||
|
{
|
||||||
|
int row, col;
|
||||||
|
int symbol;
|
||||||
|
}Character;
|
||||||
|
|
||||||
|
Character new_character(int row, int col, char symbol)
|
||||||
|
{
|
||||||
|
Character a;
|
||||||
|
a.row = row;
|
||||||
|
a.col = col;
|
||||||
|
a.symbol = symbol;
|
||||||
|
|
||||||
|
return a;
|
||||||
|
|
||||||
|
}
|
||||||
|
|
||||||
|
static inline bool check_screen();
|
||||||
|
static inline void init();
|
||||||
|
static inline void boot();
|
||||||
|
static inline void game_loop(Character main_char, int ch);
|
||||||
|
void move_char (int y, int x);
|
||||||
|
void draw_borders(WINDOW *screen);
|
||||||
|
|
||||||
|
|
||||||
|
int main(int argc, char *argv[]){
|
||||||
|
int err = 0;
|
||||||
|
|
||||||
|
initscr();
|
||||||
|
|
||||||
|
if (!check_screen()) {
|
||||||
|
fprintf(stderr, "Needs bigger terminal!!!\n");
|
||||||
|
err = 1;
|
||||||
|
}
|
||||||
|
|
||||||
|
else{
|
||||||
|
init();
|
||||||
|
boot();
|
||||||
|
}
|
||||||
|
|
||||||
|
endwin();
|
||||||
|
|
||||||
|
return err;
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
static inline bool check_screen(){
|
||||||
|
return LINES >= SCREENHEIGHT && COLS >= SCREENWIDTH;
|
||||||
|
}
|
||||||
|
|
||||||
|
static inline void init(){
|
||||||
|
|
||||||
|
// Don't show cursor
|
||||||
|
curs_set(false);
|
||||||
|
|
||||||
|
// Read arrow keys
|
||||||
|
keypad(stdscr, true);
|
||||||
|
|
||||||
|
// Read chars directly but allow interrupts
|
||||||
|
cbreak();
|
||||||
|
|
||||||
|
// Don't echo
|
||||||
|
noecho();
|
||||||
|
|
||||||
|
}
|
||||||
|
|
||||||
|
void draw_borders(WINDOW *screen) {
|
||||||
|
int x, y, i;
|
||||||
|
|
||||||
|
getmaxyx(screen, y, x);
|
||||||
|
|
||||||
|
// 4 corners
|
||||||
|
mvwprintw(screen, 0, 0, "+");
|
||||||
|
mvwprintw(screen, y - 1, 0, "+");
|
||||||
|
mvwprintw(screen, 0, x - 1, "+");
|
||||||
|
mvwprintw(screen, y - 1, x - 1, "+");
|
||||||
|
|
||||||
|
// sides
|
||||||
|
for (i = 1; i < (y - 1); i++) {
|
||||||
|
mvwprintw(screen, i, 0, "|");
|
||||||
|
mvwprintw(screen, i, x - 1, "|");
|
||||||
|
}
|
||||||
|
|
||||||
|
// top and bottom
|
||||||
|
for (i = 1; i < (x - 1); i++) {
|
||||||
|
mvwprintw(screen, 0, i, "-");
|
||||||
|
mvwprintw(screen, y - 1, i, "-");
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
// Main boot loop; keep at bottom
|
||||||
|
|
||||||
|
static inline void boot(){
|
||||||
|
Character main_char = new_character(10,10,'@');
|
||||||
|
// char main_char = '@';
|
||||||
|
|
||||||
|
printw("Welcome to fucktastic games lotto.\nPress \"q\" to quit or any other key to continue\n");
|
||||||
|
|
||||||
|
int ch = getch();
|
||||||
|
|
||||||
|
clear();
|
||||||
|
|
||||||
|
if(ch == 'q' || ch == 'Q') return;
|
||||||
|
|
||||||
|
//add wall
|
||||||
|
//should probably be a function of sorts
|
||||||
|
int wall_row_start = 15;
|
||||||
|
int wall_col_start = 10;
|
||||||
|
int wall_col_end = wall_col_start + 20;
|
||||||
|
int i;
|
||||||
|
for (i=wall_col_start;i<wall_col_end;i++){
|
||||||
|
mvaddch(wall_row_start, i, '#');
|
||||||
|
}
|
||||||
|
///
|
||||||
|
|
||||||
|
// No longer wait for characters if nothing is typed
|
||||||
|
nodelay(stdscr, true);
|
||||||
|
|
||||||
|
game_loop(main_char, ch);
|
||||||
|
|
||||||
|
}
|
||||||
|
|
||||||
|
void move_char (int y, int x) {
|
||||||
|
mvaddch(y, x, ' ');
|
||||||
|
}
|
||||||
|
|
||||||
|
int col_detect (int y, int x) {
|
||||||
|
int target = mvwinch(stdscr, y, x);
|
||||||
|
if (target == '#'){
|
||||||
|
return true;
|
||||||
|
}
|
||||||
|
|
||||||
|
// else if (target == 'M'){
|
||||||
|
// attack(target);
|
||||||
|
// }
|
||||||
|
|
||||||
|
else{
|
||||||
|
return false;
|
||||||
|
}
|
||||||
|
|
||||||
|
}
|
||||||
|
|
||||||
|
static inline void game_loop(Character main_char, int ch){
|
||||||
|
|
||||||
|
int row = main_char.row;
|
||||||
|
int col = main_char.col;
|
||||||
|
|
||||||
|
mvaddch(row, col, main_char.symbol);
|
||||||
|
refresh();
|
||||||
|
|
||||||
|
while(1){
|
||||||
|
ch = getch();
|
||||||
|
|
||||||
|
if (ch == KEY_LEFT) {
|
||||||
|
if (!col_detect(row, col -1)){
|
||||||
|
move_char(row, col);
|
||||||
|
col -= 1;
|
||||||
|
mvaddch(row, col, main_char.symbol);
|
||||||
|
refresh();
|
||||||
|
}
|
||||||
|
|
||||||
|
}
|
||||||
|
|
||||||
|
else if (ch == KEY_RIGHT) {
|
||||||
|
if (!col_detect(row, col +1)){
|
||||||
|
move_char(row, col);
|
||||||
|
col += 1 ;
|
||||||
|
mvaddch(row, col, main_char.symbol);
|
||||||
|
refresh();
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
else if (ch == KEY_UP) {
|
||||||
|
if (!col_detect(row-1, col)){
|
||||||
|
move_char(row, col);
|
||||||
|
row -= 1;
|
||||||
|
mvaddch(row, col, main_char.symbol);
|
||||||
|
refresh();
|
||||||
|
}
|
||||||
|
}
|
||||||
|
else if (ch == KEY_DOWN) {
|
||||||
|
if (!col_detect(row +1, col)){
|
||||||
|
move_char(row, col);
|
||||||
|
row += 1;
|
||||||
|
mvaddch(row, col, main_char.symbol);
|
||||||
|
refresh();
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
else if (ch == 'q' || ch == 'Q'){
|
||||||
|
break;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
}
|
Loading…
x
Reference in New Issue
Block a user