This repository has been archived on 2024-07-04. You can view files and clone it. You cannot open issues or pull requests or push a commit.
Files
khet/src/asciiart.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;
}
*/