###c
#define BLACK 0
#define BLUE 1
#define GREEN 2
#define CYAN 3
#define RED 4
#define MAGENTA 5
#define BROWN 6
#define LIGHTGRAY 7
#define DARKGRAY 8
#define LIGHTBLUE 9
#define LIGHTGREEN 10
#define LIGHTCYAN 11
#define LIGHTRED 12
#define LIGHTMAGENTA 13
#define YELLOW 14
#define WHITE 15
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#include <conio.h>
#include <assert.h>
#include <memory.h>
#include <Windows.h>
void gene_sort(void *, int, size_t, int (*)(void *, void *));
int integerCompare(void *, void *);
int doubleCompare(void *, void *);
int stringCompare(void *, void *);
void gotoxy(int x, int y);
void textcolor(int foreground, int background);
int main()
{
char pointWord[5][80]={0,}; //saving point words
char word[80]={0,}; //saving previous words
char inputed_word[80]={0,}; //temporary save
char stack[20][80]; //save history to check repetition, word stack
int stack_cnt=0; //stack push count
int pos_x=20, pos_y=6;
int word_x=1, word_y=2;
int p_pos_x=1, p_pos_y=10;
int score_pos_x=40, score_pos_y=15;
int score=0;
int len=0;
int i=0;
FILE *Pw; //pointword file pointer
Pw=fopen("c:\\data\\pointWord.txt", "rt"); //open pointword file
assert(Pw!=NULL); //is it exist?
while(!feof(Pw))
{
fgets(pointWord[i],sizeof(pointWord),Pw);
pointWord[i][strlen(pointWord[i])-1]='\0'; //delete \n character
i++;
}
fclose(Pw); //close opened file pointer
gene_sort(pointWord,sizeof(pointWord)/sizeof(pointWord[0]), sizeof(pointWord[0]), stringCompare); //sorting point word
strcpy(word,"포인터정"); //starts with "pointer jung"
system("cls");
printf("[끝말잇기 게임]\n");
printf("%s -> ", word);
gotoxy(p_pos_x, p_pos_y);
printf("*Point word*\n");
for(i=0;i<5;i++)
{
printf("%d. %s\n",i+1, pointWord[i]); //printing pointword
}
while(1)
{
gotoxy(pos_x, pos_y);
printf("단어 입력 : \b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b");
gets(inputed_word); //word to match
for(i=0;i<stack_cnt;i++)
{
if(strcmp(stack[i],inputed_word)==0) //matching with saved strings
{
while(1)
{
gotoxy(pos_x, pos_y);
printf("Wrong!! ");
getch();
gotoxy(pos_x, pos_y);
printf("단어 입력 : \b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b");
gets(inputed_word);
i=0;
break;
}
}
}
strcpy(stack[stack_cnt],inputed_word); //save to stack
stack_cnt++;
if(stack_cnt==20) //20th try
{
system("cls");
printf("You Lose!!!\n");
getch();
exit(0);
}
len=strlen(word);
if(word[len-2]==inputed_word[0]&&word[len-1]==inputed_word[1])
{
if(word_x>=70)
{
word_x=1;
word_y++;
}
else
{
word_x+=(strlen(word)+4);
}
gotoxy(word_x+1,word_y);
printf("%s -> ",inputed_word);
strcpy(word,inputed_word);
strcpy(inputed_word,"\0");
for(i=0;i<5;i++)
{
if(strcmp(word,pointWord[i])==0)
{
score+=20;
gotoxy(p_pos_x, p_pos_y+i+1);
textcolor(RED, BLACK);
printf("%d. %s\n",i+1,pointWord[i]);
//change color!
textcolor(LIGHTGRAY,BLACK);
gotoxy(score_pos_x,score_pos_y);
printf("점수 : %d", score);
if(score==100)
{
printf("You Win!!\n");
getch();
exit(0);
}
}
}
}
else
{
printf("잘못된 입력!");
Sleep(500);
printf("\r ");
}
}
printf("%s->",word);
}
void gene_sort(void *p, int count, size_t size, int (*dataCompare)(void *, void *))
{
int i, j;
void *tmp;
tmp=malloc(size);
for(i=0;i<count-1;i++)
{
for(j=i+1;j<count;j++)
{
if(dataCompare((char*)p+i*size, (char *)p+j*size)>0)
{
memcpy(tmp, (char *)p+i*size, size);
memcpy((char *)p+i*size, (char *)p+j*size, size);
memcpy((char *)p+j*size, tmp, size);
}
}
}
free(tmp);
}
int integerCompare(void *p1, void *p2)
{
if(*(int *)p1>*(int *)p2) {return 1;}
else if( *(int *)p1 == *(int *)p2) {return 0;}
else {return -1;}
}
int doubleCompare(void *p1, void *p2)
{
if(*(double *)p1>*(double *)p2) {return 1;}
else if( *(double *)p1 == *(double *)p2) {return 0;}
else {return -1;}
}
int stringCompare(void *p1, void *p2)
{
if(strcmp((char *)p1, (char *)p2)>0) {return 1;}
else if(strcmp((char *)p1, (char *)p2)==0) {return 0;}
else {return -1;}
}
void gotoxy(int x, int y)
{
COORD Pos = {x - 1, y - 1};
SetConsoleCursorPosition(GetStdHandle(STD_OUTPUT_HANDLE), Pos);
}
void textcolor(int foreground, int background)
{
int color=foreground+background*16;
SetConsoleTextAttribute(GetStdHandle(STD_OUTPUT_HANDLE), color);
}
#define BLACK 0
#define BLUE 1
#define GREEN 2
#define CYAN 3
#define RED 4
#define MAGENTA 5
#define BROWN 6
#define LIGHTGRAY 7
#define DARKGRAY 8
#define LIGHTBLUE 9
#define LIGHTGREEN 10
#define LIGHTCYAN 11
#define LIGHTRED 12
#define LIGHTMAGENTA 13
#define YELLOW 14
#define WHITE 15
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#include <conio.h>
#include <assert.h>
#include <memory.h>
#include <Windows.h>
void gene_sort(void *, int, size_t, int (*)(void *, void *));
int integerCompare(void *, void *);
int doubleCompare(void *, void *);
int stringCompare(void *, void *);
void gotoxy(int x, int y);
void textcolor(int foreground, int background);
int main()
{
char pointWord[5][80]={0,}; //saving point words
char word[80]={0,}; //saving previous words
char inputed_word[80]={0,}; //temporary save
char stack[20][80]; //save history to check repetition, word stack
int stack_cnt=0; //stack push count
int pos_x=20, pos_y=6;
int word_x=1, word_y=2;
int p_pos_x=1, p_pos_y=10;
int score_pos_x=40, score_pos_y=15;
int score=0;
int len=0;
int i=0;
FILE *Pw; //pointword file pointer
Pw=fopen("c:\\data\\pointWord.txt", "rt"); //open pointword file
assert(Pw!=NULL); //is it exist?
while(!feof(Pw))
{
fgets(pointWord[i],sizeof(pointWord),Pw);
pointWord[i][strlen(pointWord[i])-1]='\0'; //delete \n character
i++;
}
fclose(Pw); //close opened file pointer
gene_sort(pointWord,sizeof(pointWord)/sizeof(pointWord[0]), sizeof(pointWord[0]), stringCompare); //sorting point word
strcpy(word,"포인터정"); //starts with "pointer jung"
system("cls");
printf("[끝말잇기 게임]\n");
printf("%s -> ", word);
gotoxy(p_pos_x, p_pos_y);
printf("*Point word*\n");
for(i=0;i<5;i++)
{
printf("%d. %s\n",i+1, pointWord[i]); //printing pointword
}
while(1)
{
gotoxy(pos_x, pos_y);
printf("단어 입력 : \b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b");
gets(inputed_word); //word to match
for(i=0;i<stack_cnt;i++)
{
if(strcmp(stack[i],inputed_word)==0) //matching with saved strings
{
while(1)
{
gotoxy(pos_x, pos_y);
printf("Wrong!! ");
getch();
gotoxy(pos_x, pos_y);
printf("단어 입력 : \b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b");
gets(inputed_word);
i=0;
break;
}
}
}
strcpy(stack[stack_cnt],inputed_word); //save to stack
stack_cnt++;
if(stack_cnt==20) //20th try
{
system("cls");
printf("You Lose!!!\n");
getch();
exit(0);
}
len=strlen(word);
if(word[len-2]==inputed_word[0]&&word[len-1]==inputed_word[1])
{
if(word_x>=70)
{
word_x=1;
word_y++;
}
else
{
word_x+=(strlen(word)+4);
}
gotoxy(word_x+1,word_y);
printf("%s -> ",inputed_word);
strcpy(word,inputed_word);
strcpy(inputed_word,"\0");
for(i=0;i<5;i++)
{
if(strcmp(word,pointWord[i])==0)
{
score+=20;
gotoxy(p_pos_x, p_pos_y+i+1);
textcolor(RED, BLACK);
printf("%d. %s\n",i+1,pointWord[i]);
//change color!
textcolor(LIGHTGRAY,BLACK);
gotoxy(score_pos_x,score_pos_y);
printf("점수 : %d", score);
if(score==100)
{
printf("You Win!!\n");
getch();
exit(0);
}
}
}
}
else
{
printf("잘못된 입력!");
Sleep(500);
printf("\r ");
}
}
printf("%s->",word);
}
void gene_sort(void *p, int count, size_t size, int (*dataCompare)(void *, void *))
{
int i, j;
void *tmp;
tmp=malloc(size);
for(i=0;i<count-1;i++)
{
for(j=i+1;j<count;j++)
{
if(dataCompare((char*)p+i*size, (char *)p+j*size)>0)
{
memcpy(tmp, (char *)p+i*size, size);
memcpy((char *)p+i*size, (char *)p+j*size, size);
memcpy((char *)p+j*size, tmp, size);
}
}
}
free(tmp);
}
int integerCompare(void *p1, void *p2)
{
if(*(int *)p1>*(int *)p2) {return 1;}
else if( *(int *)p1 == *(int *)p2) {return 0;}
else {return -1;}
}
int doubleCompare(void *p1, void *p2)
{
if(*(double *)p1>*(double *)p2) {return 1;}
else if( *(double *)p1 == *(double *)p2) {return 0;}
else {return -1;}
}
int stringCompare(void *p1, void *p2)
{
if(strcmp((char *)p1, (char *)p2)>0) {return 1;}
else if(strcmp((char *)p1, (char *)p2)==0) {return 0;}
else {return -1;}
}
void gotoxy(int x, int y)
{
COORD Pos = {x - 1, y - 1};
SetConsoleCursorPosition(GetStdHandle(STD_OUTPUT_HANDLE), Pos);
}
void textcolor(int foreground, int background)
{
int color=foreground+background*16;
SetConsoleTextAttribute(GetStdHandle(STD_OUTPUT_HANDLE), color);
}
허접의 극치