You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.

110 lines
3.0 KiB

#include "output_nstd.h"
#include <stdio.h>
char* rahmen(char v) {
/* 1 = oben; 2 = rechts; 4 = unten; 8 = links */
switch(v) {
case 0: return "┼───";
case 1: return "╀───";
case 2: return "┾━━━";
case 3: return "╄━━━";
case 4: return "╁───";
case 5: return "╂───";
case 6: return "╆━━━";
case 7: return "╊━━━";
case 8: return "┽───";
case 9: return "╃───";
case 10: return "┿━━━";
case 11: return "╇━━━";
case 12: return "╅───";
case 13: return "╉───";
case 14: return "╈━━━";
case 15: return "╋━━━";
}
return "+---";
}
void nstd_ausgabe_unicode(sudoku* s,int color) {
int i,j;
/* Rahmen oben */
printf("┏━━━");
for(i = 0; i < 8 ; i++) {
printf("%s━━━",(s->belegung[0][i] == s->belegung[0][i+1]) ? "" : "" );
}
printf("\n");
/* Die Zeilen ausgeben */
for(i = 0; i < 9; i++) {
/* Zeile*/
printf("");
for(j = 0; j<9; j++) {
if(color) {
printf(" %s%c\033[0m %s",
(s->vorgabe[i][j] == 1) ? "\033[32;1m" : ( (s->vorgabe[i][j] == 2) ? "\033[33;1m" : "") ,
(s->feld[i][j] == 0) ? ' ' : s->feld[i][j]+48,
(j == 8 || s->belegung[i][j] != s->belegung[i][j+1]) ? "" : "" );
}else{
printf(" %c %s",
(s->feld[i][j] == 0) ? ' ' : s->feld[i][j]+48,
(j == 8 || s->belegung[i][j] != s->belegung[i][j+1]) ? "" : "" );
}
}
printf("\n");
/* trenner für i != 8 */
if(i<8) {
printf("%s", (s->belegung[ i ][ j ] == s->belegung[i+1][ j ]) ? "┠───" : "┣━━━" );
for(j = 0; j < 8; j++) {
printf("%s", rahmen(
(s->belegung[ i ][ j ] != s->belegung[ i ][j+1]) * 1
+ (s->belegung[ i ][j+1] != s->belegung[i+1][j+1]) * 2
+ (s->belegung[i+1][ j ] != s->belegung[i+1][j+1]) * 4
+ (s->belegung[ i ][ j ] != s->belegung[i+1][ j ]) * 8
)
);
}
printf("%s", (s->belegung[ i ][ j ] == s->belegung[i+1][ j ]) ? "" : "" );
printf("\n");
}
}
/* Rahmen unten */
printf("┗━━━");
for(i = 0; i < 8 ; i++) {
printf("%s━━━",(s->belegung[8][i] == s->belegung[8][i+1]) ? "" : "" );
}
printf("\n");
}
char* colors(char val) {
switch(val) {
case 1: return "\033[48;5;16m";
case 2: return "\033[48;5;105m";
case 3: return "\033[48;5;19m";
case 4: return "\033[48;5;28m";
case 5: return "\033[48;5;52m";
case 6: return "\033[48;5;55m";
case 7: return "\033[48;5;100m";
case 8: return "\033[48;5;172m";
case 9: return "\033[48;5;129m";
case 0: return "\033[48;5;129m";
}
return "";
}
void nstd_ausgabe(sudoku* s,int color) {
int i,j;
for(i=0;i<9;i++) {
if(i%3==0 && !color) printf("+-------+-------+-------+\n");
for(j=0;j<9;j++) {
if(j%3==0 && !color) printf("| ");
if(color) {
printf("%s%d \033[0m",colors(s->belegung[i][j]),s->feld[i][j]);
}else
printf("%d ",s->feld[i][j]);
}
if(!color) printf("|");
printf("\n");
}
if(!color) printf("+-------+-------+-------+\n");
}