想要复习一些c++的内容,所以动手写了一些小代码。
Python版本
因为c++不熟,所以先用python实现了一遍,然后再迁移到c++中
import numpy as np
import os
class qipan():
def __init__(self, w=10):
self.w = w
self.h = w
self.qi = np.zeros([self.w,self.h])
def pri_pan(self):
os.system('cls')
print(' ',end=' ')
for i in range(self.w + 1):
for j in range(self.h):
if i == 0:
print(j,end=' ')
continue
if j == 0:
print(i-1, end=' ')
if self.qi[i - 1][j] == 0:
print('-',end=' ')
elif self.qi[i - 1][j] == 1:
print('B',end=' ')
elif self.qi[i - 1][j] == 2:
print('W',end=' ')
else:
print('error')
break
print('')
def if_win(self):
for i in range(self.qi.shape[0] - 4):
for j in range(self.qi.shape[1] - 4):
#横
if self.qi[i][j] == self.qi[i][j+1] and self.qi[i][j] == self.qi[i][j+2] and self.qi[i][j] == self.qi[i][j+3] and self.qi[i][j] == self.qi[i][j+4]:
if self.qi[i][j] == 1:
return 1
elif self.qi[i][j] == 2:
return 2
if self.qi[i][j] == self.qi[i+1][j] and self.qi[i][j] == self.qi[i+2][j] and self.qi[i][j] == self.qi[i+3][j] and self.qi[i][j] == self.qi[i+4][j]:
if self.qi[i][j] == 1:
return 1
elif self.qi[i][j] == 2:
return 2
if self.qi[i][j] == self.qi[i+1][j+1] and self.qi[i][j] == self.qi[i+2][j+2] and self.qi[i][j] == self.qi[i+3][j+3] and self.qi[i][j] == self.qi[i+4][j+4]:
if self.qi[i][j] == 1:
return 1
elif self.qi[i][j] == 2:
return 2
return 0
def xiaqi(self,x,y,c):
if self.qi[x][y] == 0:
self.qi[x][y] = c
return 0
else:
return 1
a = qipan(9)
a.pri_pan()
while True:
print('黑方下棋')
x,y = eval(input())
while True:
st = a.xiaqi(x,y,1)
if st == 0:
break
else:
print("输入有误,请重新输入。")
x,y = eval(input())
a.pri_pan()
st = a.if_win()
if st == 2:
print("白棋获胜")
break
elif st == 1:
print("黑棋获胜")
break
print('白方下棋')
x, y = eval(input())
while True:
st = a.xiaqi(x, y, 2)
if st == 0:
break
else:
print("输入有误,请重新输入。")
x,y = eval(input())
st = a.if_win()
a.pri_pan()
if st == 2:
print("白棋获胜")
break
elif st == 1:
print("黑棋获胜")
break
c++版本的实现
#include<iostream>
// #include<windows.h>
using namespace std;
class Qipan{
public:
Qipan(int h); //构造函数
void pri_qipan(); //棋盘的打印
int do_qi(int x,int y,int type); //落子
int if_win(); //判断输赢
int weight;
int high;
int** qi = nullptr; //棋盘矩阵
};
int main(){
Qipan a(9); //初始棋盘构造
a.pri_qipan();
int x,y;
int st;
int ss;
while (1)
{
cout<<"bleak:"; //黑方落子
cin>>x>>y; //读取输入的坐标(两个数字之间用空格隔开)
while (1)
{
ss = a.do_qi(x,y,1); //进行落子操作。1代表黑子
if(ss == 0){ //返回0代表操作成功
break;
}
else{
cout<<"re put"<<endl; //否则重新输入
cin>>x>>y;
}
}
st = a.if_win(); //判断输赢
a.pri_qipan();
if(st == 1){
cout<<"Bleak win"<<endl;
break;
}
else if(st == 2){
cout<<"withe win"<<endl;
break;
}
cout<<"wihit:"; //白方落子
cin>>x>>y;
while (1)
{
ss = a.do_qi(x,y,2); //2代表白棋
if(ss == 0){
break;
}
else{
cout<<"re put"<<endl;
cin>>x>>y;
}
}
a.do_qi(x,y,1);
st = a.if_win();
a.pri_qipan();
if(st == 1){
cout<<"Bleak win"<<endl;
break;
}
else if(st == 2){
cout<<"withe win"<<endl;
break;
}
}
system("pause");
return 0;
}
Qipan::Qipan(int h){
this->weight = h; //构造长宽相等的棋盘
this->high = h;
this->qi = new int*[weight]; //初始化二维矩阵
for(int i=0; i<this->high;i++){
qi[i] = new int[this->high];
}
for (int i=0;i<weight; i++)
{
for(int j=0;j<high;j++){
qi[i][j] = 0; //初始化为0
}
}
}
void Qipan::pri_qipan(){
system ("cls");
cout<<" ";
//便利二维矩阵从而实现棋盘的打印
for(int i=0; i<weight + 1; i++){
for(int j=0; j<high; j++){
if(i==0){
cout<<j<<" ";
continue;
}
if(j==0){
cout<<i-1<<" ";
}
if(qi[i-1][j] == 0){
cout<<"- ";
}
else if (qi[i-1][j]==1)
{
cout<<"B ";
}
else if (qi[i-1][j]==2)
{
cout<<"W ";
}
else{
cout<<"error"<<endl;
break;
}
}
cout<<endl;
}
}
int Qipan::do_qi(int x,int y,int type){
//通过改变二维矩阵的数字从而实现落子操作
if(this->qi[x][y] == 0){
this->qi[x][y] = type;
return 0;
}
else{
return 1;
}
}
int Qipan::if_win(){
for(int i;i<this->weight-4;i++){
for(int j=0;j<this->high-4;j++){
//横向判断
if(this->qi[i][j] == this->qi[i][j + 1] && this->qi[i][j] == this->qi[i][j + 2] && this->qi[i][j] == this->qi[i][j + 3] && this->qi[i][j] == this->qi[i][j + 4] ){
if(this->qi[i][j] == 1){
return 1;
}
else if(this->qi[i][j] == 2){
return 2;
}
}
//纵向判断
if(this->qi[i][j] == this->qi[i + 1][j] && this->qi[i][j] == this->qi[i + 2][j] && this->qi[i][j] == this->qi[i + 3][j] && this->qi[i][j] == this->qi[i + 4][j] ){
if(this->qi[i][j] == 1){
return 1;
}
else if(this->qi[i][j] == 2){
return 2;
}
}
//斜向判断
if(this->qi[i][j] == this->qi[i + 1][j + 1] && this->qi[i][j] == this->qi[i + 2][j + 2] && this->qi[i][j] == this->qi[i + 3][j + 3] && this->qi[i][j] == this->qi[i + 4][j + 4] ){
if(this->qi[i][j] == 1){
return 1;
}
else if(this->qi[i][j] == 2){
return 2;
}
}
}
}
return 0;
}