Hallo und guten Morgen,
folgendes Problem : Wir haben ein 4Gewinnt Spiel geschrieben für die Windows Textkonsole. Nun die Frage, wie die einzelnen Eingaben von den 2 Spielern farblich unterschieden werden können.
Hier unser Code :
Ich denke, vielleicht könnte man bei dem "switch" ja schon die textcolor irgendwie einbauen, hm?
---------------------------------------------------------------------
#include <iostream.h>
#include <conio.h>
#include <stdio.h>
#define WIDTH 7
#define HEIGHT 6
#define N 4
int player;
int feld[9][8];
char feld1[9][8];
char player1[20];
char player2[20];
void ausgeben(void)
{
clrscr();
for (int i=0; i<=8; i++) {
for (int j=0; j<=7; j++) {
switch (feld[i][j]) {
case 1: feld1[i][j]=1;break;
case -1: feld1[i][j]=2;break;
case 0: feld1[i][j]=' ';break;
}
}
}
//system("CLS");
cout << "\xFF\xFF\xFF\xFF\xFF\xFF\xFF 1 \xFF 2 \xFF 3 \xFF 4 \xFF 5 \xFF 6 \
xFF 7 \xFF" << endl;
cout << "\xFF\xFF\xFF\xFF\xFF\xFF\xC9";
for (int i=1; i<=6; i++) cout << "\xCD\xCD\xCD\xCB";
cout << "\xCD\xCD\xCD\xBB"<<endl;
for (int j=1; j<=5; j++) {
cout << "\xFF\xFF\xFF\xFF"<<j;
for (int i=1; i<=7; i++) {
cout<<"\xFF\xBA\xFF";
//if (feld[j][i]==1) textcolor(12);
//if (feld[j][i]==-1) textcolor(14);
cout<<feld1[i][j];
//textcolor(15);
}
cout<<"\xFF\xBA"<<endl;
cout << "\xFF\xFF\xFF\xFF\xFF\xFF\xCC";
for (int i=1; i<=6; i++) cout << "\xCD\xCD\xCD\xCE";
cout << "\xCD\xCD\xCD\xB9"<<endl;
}
cout << "\xFF\xFF\xFF\xFF"<<"6";
for (int i=1; i<=7; i++) {
cout<<"\xFF\xBA\xFF";
//if (feld[j][6]==1) textcolor(12);
//if (feld[j][6]==-1) textcolor(14);
cout<<feld1[i][6];
//textcolor(15);
}
cout<<"\xFF\xBA"<<endl;
cout << "\xFF\xFF\xFF\xFF\xFF\xFF\xC8";
for (int i=1; i<=6; i++) cout << "\xCD\xCD\xCD\xCA";
cout << "\xCD\xCD\xCD\xBC"<<endl;
}
void players(void)
{
cout << "Name des ersten Spielers: ";
gets(player1);
cout << "Name des zweiten Spielers: ";
gets(player2);
}
int select_column(int player)
{
int col;
switch(player) {
case 1: cout << endl << "Der Spieler "; puts(player1); cout<<"ist am Zug"
<< endl; break;
case -1: cout << endl << "Der Spieler "; puts(player2); cout<<"ist am Zug"
<< endl; break;
}
cout <<"Wählen Sie die Spalte(1 bis 7): ";
cin >> col;
return col;
}
int insert_stone(int col, int player)
{
int i=1;
while ((feld[col][i]==0) && (i<=HEIGHT)) i++;
if (i>1) {
switch (player) {
case 1: feld[col][i-1]=1;break;
case -1: feld[col][i-1]=-1;break;
}
}
return (i-1);
}
int check(int col, int row, int dir, int player)
{
int c,r,counter=0;
///////////////////////////////
// Vielleicht irgendwo hier?//
/////////////////////////////
switch(dir) {
case 1: r=+1; c=+0; break;
case 2: r=+1; c=+1; break;
case 3: r=+0; c=+1; break;
case 4: r=-1; c=+1; break;
case 5: r=-1; c=+0; break;
case 6: r=-1; c=-1; break;
case 7: r=+0; c=-1; break;
case 8: r=+1; c=-1; break;
}
while (feld[col][row]==player) {
row+=r;col+=c;counter++;
if (counter==N) break;
}
return counter-N+1;
}
int inspect(int player)
{
int success=0;
for (int c=1; c<=WIDTH; c++) {
for (int r=1; r<=HEIGHT; r++) {
if(feld[c][r]!=0) {
for (int i=1; i<=8; i++) {
if(check(c,r,i,player)==1) {
success=1; break;
}
}
}
}
}
return success;
}
void play(void)
{
//int i=0;
int player=1;
ausgeben();
while ((inspect(player)!=1) && (inspect(-player)!=1)) {
if (insert_stone(select_column(player),player)>0) player*=-1;
ausgeben();
}
ausgeben();
switch(-player) {
case 1: puts(player1);cout<<"hat gewonnen!"<<endl;break;
case -1: puts(player2);cout<<"hat gewonnen!"<<endl;break;
}
cout << "Herzlichen Glückwunsch!!!";
getch();
}
void main(void)
{
for (int i=0; i<=8; i++) {
for (int j=0; j<=7; j++) {
feld[i][j]=0;
}
}
//ausgeben();
players();
play();
//getch();
}
Ähm ja, ich hoffe, dass es in Ordnung geht, dass ich hier den ganzen Code hingemalt habe. Ich denke aber, dann kann man das besser nachvollziehen.
Danke im Voraus für die Mühe.
aufdieantwortwartender Sergej
S.K. :-)