赞 | 0 |
VIP | 3 |
好人卡 | 0 |
积分 | 1 |
经验 | 9636 |
最后登录 | 2014-2-13 |
在线时间 | 197 小时 |
Lv1.梦旅人
- 梦石
- 0
- 星屑
- 50
- 在线时间
- 197 小时
- 注册时间
- 2011-6-10
- 帖子
- 231
|
本帖最后由 艾拉梅德 于 2013-12-2 19:15 编辑
前几天才做完的c++黑白棋游戏,老师要求写3种文件……嗯,显示语言是法语
第一个hpp- #include "header.h"
- #include <iostream>
- #include <string>
- using namespace std;
- void Plateau::affiche() const
- {
- int i, j;
- cout <<endl;
- cout << " 0 1 2 3 4 5 6 7 "<<endl;
- cout << " ================ "<<endl;
- for (i=0;i<MAX;i++){
- for (j=0; j<MAX;j++){
- if (j==0)
- cout <<i <<" " <<p_plateau[i][j];
- else if (j==MAX-1)
- cout << " " <<p_plateau[i][j]<< " "<< i;
- else
- cout << " "<<p_plateau[i][j];}
- cout << endl;}
- cout << " ================ "<<endl;
- cout << " 0 1 2 3 4 5 6 7"<<endl;
- cout <<endl;
- }
- int Plateau::reste()
- {
- int n=0;
- for (int i=0;i<MAX;i++)
- {
- for (int j=0;j<MAX;j++)
- {
- if (p_plateau[i][j]==V)
- n++;
- }
- }
- return n;
- }
- void Plateau::pion_trans(const int ligne, const int colone, const int tour)
- {
- if (tour==0)
- p_plateau[ligne][colone]=B;
- else
- p_plateau[ligne][colone]=N;
- }
- int Plateau::calcul_score(const char nom)
- {
- int n=0;
- for (int i=0; i<MAX; i++)
- {
- for (int j=0; j < MAX; j++)
- {
- if (p_plateau[i][j]==nom)
- n++;
- }
- }
- return n;
- }
- void Joueur::saisirnom(const int i)
- {
- string nom;
- cout << "Quel est le nom de joueur"<< i << "?"<<endl;
- cin >> nom;
- j_nom=trans_nom(nom);
- }
- string Joueur::trans_nom(string nom)
- {
- for (int i=1;i<nom.length();i++)
- nom[i]=tolower(nom[i]);
- nom[0]=toupper(nom[0]);
- return nom;
- }
- int Joueur::change_score(const int n)
- {
- j_score=n;
- return j_score;
- }
- void Jeu::commence()
- {
- j1.saisirnom(1);
- j2.saisirnom(2);
- joueurCourant=0;
- cout << "Donc le blanc commence. C'est le tour de "<< j1.getnom() <<endl;
- cout << B<< ":pour le pion blanc"<< " "<< N<< ":pour le pion noir"<<endl;
- p.affiche();
- run();
- }
- void Jeu::saisir(const int tour)
- {
- int ligne, colone, n;
- cout << "Quel ligne vous voulez placer votre pion? ligne(0-7)"<<endl;
- cin>> ligne;
- while (ligne < 0 || ligne > 7)
- {
- cout << "Erreur, resaisir"<<endl;
- cin>> ligne;
- }
- cout << "Quel colone vous voulez placer votre pion? colone(0-7)"<<endl;
- cin>> colone;
- while (colone < 0 || colone > 7)
- {
- cout << "Erreur, resaisir"<<endl;
- cin>> colone;
- }
- if (!p.determiner_vide(ligne,colone))//si ce n'est pas vide
- {
- cout << "Ici il y a deja un pion"<<endl;
- saisir(tour);
- }
- else{
- n= p.determiner(ligne, colone, tour);
- if (n==0)
- {
- cout << "Ce n'est pas une place valide"<<endl;
- p.affiche();
- saisir(tour);
- }
- else
- {
- cout << "C'est une place valide"<<endl;
- score();
- p.affiche();
- }
- }
- }
- void Jeu::run()
- {
- while (p.reste() != 0)
- {
- if (p.skip(joueurCourant))//s'il n'y plus de place, saute
- {
- cout << "Car il n'y pas de place, donc maintenant c'est le tour de joueur "<< joueurCourant+2<<endl;
- joueurCourant=(joueurCourant+1)%2;
- }
- if (joueurCourant==0)
- cout << j1.getnom()<<", placez votre pion."<<endl;
- else
- cout << j2.getnom()<<", placez votre pion."<<endl;
- saisir(joueurCourant);
- joueurCourant=(joueurCourant+1)%2;
- }
- fin();
- }
- bool Plateau::skip(const int tour)
- {
- int cpt=0, i, j;
- char type;
- if (tour==0)
- type=B;
- else
- type=N;
- for (i=0;i<MAX;i++)
- {
- for(j=0;j<MAX;j++)
- {
- if (p_plateau[i][j]==V)
- {
- cpt+=determiner(i, j, tour, false);
- }
- }
- }
- return (cpt==0);
- }
- bool Plateau::determiner_vide(const int ligne, const int colone)
- {
- return (p_plateau[ligne][colone]==V);
- }
- int Plateau::determiner(const int i, const int j, const int tour, bool skip)
- {
- int ligne=i,colone=j , n=0, cpt;
- char type;
- if (tour==0)
- type=B;
- else
- type=N;
- //haut
- if (i != 0){
- while (ligne >= 0 && (p_plateau[ligne-1][colone]!=type && p_plateau[ligne-1][colone]!=V))
- {
- ligne--;}
- if (p_plateau[ligne-1][colone]==type)
- {
- n+=(i-ligne);
- if (skip != false){
- for (cpt=i-1;cpt>ligne-1;cpt--)
- {
- pion_trans(cpt, colone, tour);
- }}
- }
- }
- ligne=i,colone=j;
- //haut droit
- if (i != 0 && j != MAX-1){
- while ((ligne >= 0 && colone < MAX) && (p_plateau[ligne-1][colone+1]!=type && p_plateau[ligne-1][colone+1]!=V))
- {
- ligne--;
- colone++;
- }
- if (p_plateau[ligne-1][colone+1]==type)
- {
- n+=(i-ligne);
- if (skip != false){
- ligne=i,colone=j;
- while ((ligne >= 0 && colone < MAX) && (p_plateau[ligne-1][colone+1]!=type && p_plateau[ligne-1][colone+1]!=V))
- {
- ligne--;
- colone++;
- pion_trans(ligne, colone, tour);
- }}
- }}
- ligne=i,colone=j;
- //droit
- if (j != MAX-1){
- while (colone < MAX && (p_plateau[ligne][colone+1]!=type && p_plateau[ligne][colone+1]!=V))
- {
- colone++;}
- if (p_plateau[ligne][colone+1]==type)
- {
- n+=(colone-j);
- if (skip != false){
- for (cpt=j+1;cpt<colone+1;cpt++)
- {
- pion_trans(ligne, cpt, tour);
- }}
- }
- }
- ligne=i,colone=j;
- //bas droit
- if (i != MAX-1 && j != MAX-1){
- while ((ligne < MAX && colone < MAX) && (p_plateau[ligne+1][colone+1]!=type && p_plateau[ligne+1][colone+1]!=V))
- {
- ligne++;
- colone++;
- }
- if (p_plateau[ligne+1][colone+1]==type)
- {
- n+=(ligne-i);
- if (skip != false){
- ligne=i,colone=j;
- while ((ligne < MAX && colone < MAX) && (p_plateau[ligne+1][colone+1]!=type && p_plateau[ligne+1][colone+1]!=V))
- {
- ligne++;
- colone++;
- pion_trans(ligne,colone,tour);
- }}
- }}
- //bas
- ligne=i,colone=j;
- if (i != MAX-1){
- while (ligne < MAX && (p_plateau[ligne+1][colone]!=type && p_plateau[ligne+1][colone]!=V))
- {
- ligne++;}
- if (p_plateau[ligne+1][colone]==type)
- {
- n+=(ligne-i);
- if (skip != false){
- for (cpt=i+1;cpt<ligne+1;cpt++)
- {
- pion_trans(cpt, colone, tour);
- }
- }}
- }
- //bas gauche
- ligne=i,colone=j;
- if (i != MAX-1 && j != 0){
- while ((ligne < MAX && colone >=0) && (p_plateau[ligne+1][colone-1]!=type && p_plateau[ligne+1][colone-1]!=V))
- {
- ligne++;
- colone--;
- }
- if (p_plateau[ligne+1][colone-1]==type)
- {
- n+=(ligne-i);
- if (skip != false){
- ligne=i,colone=j;
- while ((ligne < MAX && colone >=0) && (p_plateau[ligne+1][colone-1]!=type && p_plateau[ligne+1][colone-1]!=V))
- {
- ligne++;
- colone--;
- pion_trans(ligne,colone,tour);
- }}
- }}
- //gauche
- ligne=i,colone=j;
- if (i != 0){
- while (ligne > 0 && (p_plateau[ligne][colone-1]!=type && p_plateau[ligne][colone-1]!=V))
- {
- colone--;}
- if (p_plateau[ligne][colone-1]==type)
- {
- n+=(j-colone);
- if (skip != false){
- for (cpt=j-1;cpt>colone-1;cpt--)
- {
- pion_trans(ligne, cpt, tour);
- }
- }}
- }
- //haut gauche
- ligne=i,colone=j;
- if (i != 0 && j != 0){
- while ((ligne >=0 && colone >=0) && (p_plateau[ligne-1][colone-1]!=type && p_plateau[ligne-1][colone-1]!=V))
- {
- ligne--;
- colone--;
- }
- if (p_plateau[ligne-1][colone-1]==type)
- {
- n+=(i-ligne);
- ligne=i,colone=j;
- if (skip != false){
- while ((ligne >=0 && colone >=0) && (p_plateau[ligne-1][colone-1]!=type && p_plateau[ligne-1][colone-1]!=V))
- {
- ligne--;
- colone--;
- pion_trans(ligne,colone,tour);
- }}
- }}
- if (n > 0 && skip!=false)
- p_plateau[i][j]=type;
- return n;
- }
- void Jeu::score()
- {
- int b=p.calcul_score(B);
- int n=p.calcul_score(N);
- cout << "Le score de joueur 1 "<< j1.getnom()<<" est :" << j1.change_score(b) << endl;
- cout << "Le score de joueur 2 "<< j2.getnom()<<" est :" << j2.change_score(n) << endl;
- }
- void Jeu::fin()
- {
- if (j1.getscore() > j2.getscore())
- cout << "C'est le joueur " << j1.getnom() << " qui a gagne!"<<endl;
- else if (j2.getscore() > j1.getscore())
- cout << "C'est le joueur " << j2.getnom() << " qui a gagne!"<<endl;
- else
- cout << ""<<endl;
- }
复制代码 然后主程序- #include <iostream>
- #include "header.h"
- using namespace std;
- int main()
- {
- char recommence = 'n';
- cout << "Bienvenue! C'est un jeu d'Othello!" << endl;
- Jeu j;
- do{
- j.commence();
- cout << "Est-ce que vous-voulez recommencer?(o/n)"<<endl;
- cin>>recommence;
- }while (recommence=='o');
- return 0;
- }
复制代码 然后最后的.h- #ifndef HEADER_H_INCLUDED
- #define HEADER_H_INCLUDED
- #include <string>
- #include <iostream>
- using namespace std;
- const char B='o';
- const char N='*';
- const char V='-'; // pour repr¨¦senter une case vide
- const int MAX=8;
- class Plateau
- {
- public:
- Plateau(){}
- void affiche() const;
- int reste();
- bool skip(const int);
- bool determiner_vide(const int, const int);
- void pion_trans(const int, const int, const int);
- int calcul_score(const char);
- int determiner(const int, const int, const int, bool=true);
- private:
- char p_plateau[MAX][MAX]={
- {V,V,V,V,V,V,V,V},
- {V,V,V,V,V,V,V,V},
- {V,V,V,V,V,V,V,V},
- {V,V,V,B,N,V,V,V},
- {V,V,V,N,B,V,V,V},
- {V,V,V,V,V,V,V,V},
- {V,V,V,V,V,V,V,V},
- {V,V,V,V,V,V,V,V}};
- };
- class Joueur
- {
- public:
- Joueur(int const coul=1, string const nom="Joueur", int const score=0):j_coul(coul), j_nom(nom), j_score(score){}
- void saisirnom(const int);
- string trans_nom(string nom);
- string getnom(){return j_nom;}
- int change_score(const int);
- int getscore(){return j_score;}
- private:
- string j_nom ; // le nom du joueur
- int j_coul ; // caract¨¨re repr¨¦sentant le joueur : 1 ou 2
- int j_score ; // le score du joueur pour la partie en cours
- };
- class Jeu
- {
- public:
- void commence();
- void saisir(const int);
- void run();
- void score();
- void fin();
- private:
- Plateau p; // le plateau de jeu
- Joueur j1, j2; // les 2 joueurs
- int joueurCourant ; //0 si joueur 1, 1 sinon
- };
- #endif // HEADER_H_INCLUDED
复制代码 大概就这样,这是两个玩家版本,之后还要写电脑AI版本的…… |
|