code for printing board and placing pieces, simple test in main()
This commit is contained in:
parent
f4fa43c695
commit
4e1e418117
176
src/server.c
176
src/server.c
@ -1,5 +1,8 @@
|
||||
/* -*- c-basic-offset: 4 -*- */
|
||||
|
||||
#include <stdio.h>
|
||||
#include <stdlib.h>
|
||||
|
||||
#define NONE 0
|
||||
#define PHARAO 1
|
||||
#define DJHED 2
|
||||
@ -7,44 +10,92 @@
|
||||
#define OBELISK 4
|
||||
#define OBELISK2 5
|
||||
|
||||
#define N_PIECE_TYPES 6
|
||||
|
||||
#define F_ROTATE 1
|
||||
#define F_SPLIT 2
|
||||
|
||||
#define BOARD_WIDTH 10
|
||||
#define BOARD_HEIGHT 8
|
||||
|
||||
struct pieceinfo {
|
||||
int num;
|
||||
} pieceinfo[] = {
|
||||
{ // NONE
|
||||
.num = 0 },
|
||||
{ // PHARAO
|
||||
.num = 1 },
|
||||
{ // DJHED
|
||||
.num = 2 },
|
||||
{ // PYRAMID
|
||||
.num = 7 },
|
||||
{ // OBELISK
|
||||
.num = 4 },
|
||||
{ // OBELISK2
|
||||
.num = 0 },
|
||||
};
|
||||
|
||||
struct square {
|
||||
int piece : 4;
|
||||
int side : 1;
|
||||
int dir : 2;
|
||||
} board[10][8];
|
||||
unsigned int piece : 4;
|
||||
unsigned int side : 1;
|
||||
unsigned int dir : 2;
|
||||
} board[BOARD_WIDTH][BOARD_HEIGHT];
|
||||
|
||||
|
||||
/*
|
||||
struct pieceinfo {
|
||||
char ascii[];
|
||||
} pieceinfo[] = {
|
||||
{ //NONE
|
||||
.ascii = { ' ' } }
|
||||
{ //PHARAO
|
||||
.ascii = { '=' } }
|
||||
{ //DJHED
|
||||
.ascii = { '/', '\\' } }
|
||||
{ //PYRAMID
|
||||
.ascii = { 'd', 'b', 'p', 'q' } }
|
||||
{ //OBELISK
|
||||
.ascii = { 'o' } }
|
||||
{ //OBELISK2
|
||||
.ascii = { '@' } }
|
||||
};
|
||||
*/
|
||||
|
||||
/*
|
||||
void
|
||||
print_board() {
|
||||
for (int y=0; y<8; y++)
|
||||
for (int x=0; x<10; x++)
|
||||
char classic_setup[] =
|
||||
"H40" // PHARAO
|
||||
"E40E51" // DJHED
|
||||
"H20G71E20D23E93D90C30" // PYRAMID
|
||||
"H30H30H50H50" // OBELISK
|
||||
;
|
||||
|
||||
|
||||
char asciiart_small_pieces[] =
|
||||
" " // NONE
|
||||
"OOOOOOOOXXXXXXXX" // PHARAO
|
||||
".''..''..**..**." // DJHED
|
||||
"/oo\\o/\\o/xx\\x/\\x" // PYRAMID
|
||||
"o o o o x x x x " // OBELISK
|
||||
"ooooooooxxxxxxxx" // OBELISK2
|
||||
;
|
||||
|
||||
void print_piece_small(int piece, int side, int dir)
|
||||
{
|
||||
int index = (piece*4*2 + side*4 + dir) * 2;
|
||||
printf("%c%c",
|
||||
asciiart_small_pieces[index],
|
||||
asciiart_small_pieces[index+1]);
|
||||
}
|
||||
|
||||
void print_board_small()
|
||||
{
|
||||
int i, j;
|
||||
|
||||
char vline, hline, xline;
|
||||
vline = '|', hline = '-', xline = '+';
|
||||
|
||||
printf(" %c", vline);
|
||||
for (j = 0; j < BOARD_WIDTH; j++)
|
||||
printf(" %d%c", j, vline);
|
||||
printf("\n");
|
||||
for (j = 0; j < BOARD_WIDTH+1; j++)
|
||||
printf("%c%c%c", hline, hline, xline);
|
||||
printf("\n");
|
||||
|
||||
for (i = 0; i < BOARD_HEIGHT; i++) {
|
||||
printf(" %c%c", 'A'+i, vline);
|
||||
for (j = 0; j < BOARD_WIDTH; j++) {
|
||||
print_piece_small(board[j][i].piece,
|
||||
board[j][i].side,
|
||||
board[j][i].dir);
|
||||
printf("%c", vline);
|
||||
}
|
||||
*/
|
||||
printf("\n");
|
||||
for (j = 0; j < BOARD_WIDTH+1; j++)
|
||||
printf("%c%c%c", hline, hline, xline);
|
||||
printf("\n");
|
||||
}
|
||||
}
|
||||
|
||||
int
|
||||
laser(int side) {
|
||||
@ -148,8 +199,73 @@ move(int side, int x, int y, int dir, int flags) {
|
||||
return 1;
|
||||
}
|
||||
|
||||
void
|
||||
place(int row, int col, int piece, int side, int dir)
|
||||
{
|
||||
if (board[col][row].piece == OBELISK &&
|
||||
board[col][row].side == side &&
|
||||
piece == OBELISK) {
|
||||
piece = OBELISK2;
|
||||
} else if (board[col][row].piece != NONE &&
|
||||
piece != NONE) {
|
||||
fprintf(stderr, "error: trying to place a piece on a non-empty square\n");
|
||||
exit(EXIT_FAILURE);
|
||||
}
|
||||
|
||||
board[col][row].piece = piece;
|
||||
board[col][row].side = side;
|
||||
board[col][row].dir = dir;
|
||||
}
|
||||
|
||||
void
|
||||
clear_board()
|
||||
{
|
||||
int i, j;
|
||||
for (i = 0; i < BOARD_HEIGHT; i++)
|
||||
for (j = 0; j < BOARD_WIDTH; j++)
|
||||
place(i, j, 0, 0, 0);
|
||||
}
|
||||
|
||||
void
|
||||
setup_board_place_piece(int piece, int side, char *place_desc)
|
||||
{
|
||||
int row, col, dir;
|
||||
|
||||
row = place_desc[0]-'A';
|
||||
col = place_desc[1]-'0';
|
||||
dir = place_desc[2]-'0';
|
||||
|
||||
if (side == 1) {
|
||||
row = BOARD_HEIGHT-row-1;
|
||||
col = BOARD_WIDTH-col-1;
|
||||
dir = (dir+2)&3;
|
||||
}
|
||||
|
||||
place(row, col, piece, side, dir);
|
||||
}
|
||||
|
||||
void
|
||||
setup_board(char *desc)
|
||||
{
|
||||
int side, piece, num, i;
|
||||
|
||||
clear_board();
|
||||
|
||||
for (side = 0; side < 2; side++) {
|
||||
i = 0;
|
||||
for (piece = 0; piece < N_PIECE_TYPES; piece++) {
|
||||
for (num = 0; num < pieceinfo[piece].num; num++) {
|
||||
setup_board_place_piece(piece, side,
|
||||
&desc[i*3]);
|
||||
i++;
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
int
|
||||
main() {
|
||||
|
||||
setup_board(classic_setup);
|
||||
print_board_small();
|
||||
}
|
||||
|
Reference in New Issue
Block a user