115 lines
2.9 KiB
C
115 lines
2.9 KiB
C
/* -*- c-basic-offset: 4 -*- */
|
|
|
|
#include <stdio.h>
|
|
#include <string.h>
|
|
|
|
#include "game.h"
|
|
#include "asciiart.h"
|
|
|
|
#define SMALL_WIDTH ASCIIART_SMALL_BOARD_WIDTH
|
|
#define SMALL_HEIGHT ASCIIART_SMALL_BOARD_HEIGHT
|
|
|
|
char asciiart_small_blank_board[] =
|
|
"red \n"
|
|
" | 0| 1| 2| 3| 4| 5| 6| 7| 8| 9| \n"
|
|
"--r--s--s--+--+--+--+--+--r--r--s--\n"
|
|
" A| | | | | | | | | | |A \n"
|
|
"--r--r--s--+--+--+--+--+--r--s--s--\n"
|
|
" B| | | | | | | | | | |B \n"
|
|
"--r--r--+--+--+--+--+--+--+--s--s--\n"
|
|
" C| | | | | | | | | | |C \n"
|
|
"--r--r--+--+--+--+--+--+--+--s--s--\n"
|
|
" D| | | | | | | | | | |D \n"
|
|
"--r--r--+--+--+--+--+--+--+--s--s--\n"
|
|
" E| | | | | | | | | | |E \n"
|
|
"--r--r--+--+--+--+--+--+--+--s--s--\n"
|
|
" F| | | | | | | | | | |F \n"
|
|
"--r--r--+--+--+--+--+--+--+--s--s--\n"
|
|
" G| | | | | | | | | | |G \n"
|
|
"--r--r--s--+--+--+--+--+--r--s--s--\n"
|
|
" H| | | | | | | | | | |H \n"
|
|
"--r--s--s--+--+--+--+--+--r--r--s--\n"
|
|
" | 0| 1| 2| 3| 4| 5| 6| 7| 8| 9| \n"
|
|
" silver\n"
|
|
;
|
|
|
|
char asciiart_small_pieces[] =
|
|
" " // NONE
|
|
"SSSSSSSSRRRRRRRR" // PHARAOH
|
|
",'`.,'`..\"\"..\"\"." // DJHED
|
|
"`/\\'/.,\\\"/\\\"/==\\" // PYRAMID
|
|
". . . . = = = = " // OBELISK
|
|
"........========" // OBELISK2
|
|
;
|
|
|
|
int
|
|
asciiart_small_square_index(int x, int y)
|
|
{
|
|
return SMALL_WIDTH*(y*2+3)+(x*3+3);
|
|
}
|
|
|
|
void
|
|
asciiart_small_draw_piece(char *buf, int x, int y, square_t square)
|
|
{
|
|
int piece_index = (square.piece*4*2 + square.side*4 + square.dir) * 2;
|
|
int buf_index = asciiart_small_square_index(x, y);
|
|
buf[buf_index] = asciiart_small_pieces[piece_index];
|
|
buf[buf_index+1] = asciiart_small_pieces[piece_index+1];
|
|
}
|
|
|
|
void
|
|
asciiart_small_draw_grid(char *buf)
|
|
{
|
|
strcpy(buf, asciiart_small_blank_board);
|
|
}
|
|
|
|
void
|
|
asciiart_small_draw_laserhit(char *buf, game_t *game)
|
|
{
|
|
int x, y, i;
|
|
|
|
x = game->laser_pos[0];
|
|
y = game->laser_pos[1];
|
|
|
|
if (x == -1 && y == -1) return;
|
|
|
|
i = asciiart_small_square_index(x, y);
|
|
if (x == -1 || x == BOARD_WIDTH) {
|
|
i += (x==-1) ? 2 : -1;
|
|
buf[i] = '#';
|
|
} else {
|
|
if (y == -1)
|
|
i += SMALL_WIDTH;
|
|
else if (y == BOARD_HEIGHT)
|
|
i -= SMALL_WIDTH;
|
|
if (game->last_hit.piece!=OBELISK2)
|
|
buf[i] = '#';
|
|
buf[i+1] = '#';
|
|
}
|
|
}
|
|
|
|
void
|
|
asciiart_small_draw_board(char *buf, game_t *game)
|
|
{
|
|
int x, y;
|
|
asciiart_small_draw_grid(buf);
|
|
for (y = 0; y < BOARD_HEIGHT; y++) {
|
|
for (x = 0; x < BOARD_WIDTH; x++) {
|
|
asciiart_small_draw_piece(buf, x, y, game->board[x][y]);
|
|
}
|
|
}
|
|
asciiart_small_draw_laserhit(buf, game);
|
|
}
|
|
|
|
/*
|
|
int
|
|
main(void)
|
|
{
|
|
printf("%d, %d\n", strlen(asciiart_small_blank_board), SMALL_WIDTH*SMALL_HEIGHT);
|
|
char buf[SMALL_WIDTH*SMALL_HEIGHT+1];
|
|
asciiart_small_draw_board(buf);
|
|
printf("+++\n%s+++\n", buf);
|
|
return 0;
|
|
}
|
|
*/
|