C++入门级(超级基础)练手小项目

阅读: 评论:0

C++入门级(超级基础)练手小项目

C++入门级(超级基础)练手小项目

学习了C/C++的一些基本语法和基本编程思想后,我们可以用C++写一个简单的五子棋游戏。

实现思想:

游戏落子方式为从键盘中输入相应位置的坐标。我们只需要设计两个类就可完成游戏的思想1.棋盘类:包含一个二维矩阵 int size[][] ,用于记录棋盘中各个坐标的状态,每个坐标有三个状态:(1)size[][]中的元素的为1,表示该处落入白子。(2)size[][]中的元素的为-1,表示该处落入黑子。(2)size[][]中的元素的为0,表示该处未落子。初始化方法initial();用于对棋盘进行初始化棋盘打印方法print();将棋盘打印出来。2.玩家类//玩家姓名string name;//玩家需要操作的棋盘Panel *P;//Type用于只是玩家是黑子还是白子,Typeint Type;//Judgment判断玩家是否赢得游戏,返回true则表示该玩家赢的游戏。bool Judgment();//set用于设置玩家的落子,当玩家落子后设置相应的坐标点void set();

以下是具体代码:

1.棋盘类
Panel.h

#pragma once
class Panel
{
public:Panel();~Panel();//初始化棋盘void initial();//棋盘的规模为25x25int const P_size = 25;//如果size[i][j]=0,则表示该点没有落子//size[i][j]=1,则表示该点为玩家A的棋子//size[i][j]=-1,则表示该点为玩家B的棋子int size [25][25];//打印棋盘和棋子void print();};

Panel.c

#include<iostream>
#include "Panel.h"using namespace std;//构造函数
Panel::Panel() {initial();
}void Panel::initial()
{//初始化棋盘数组;//棋盘规则,棋盘为二维数组,其中初始时棋盘中没有棋子for (int i = 0; i < this->P_size; i++){for (int j = 0; j < this->P_size; j++){this->size[i][j] = 0;}}
}//打印棋盘
void Panel::print()
{//打印棋盘列号cout << "    ";for (int i = 0; i < this->P_size; i++){if (i < 10)cout << "0" << i << "   ";elsecout << i << "   ";}cout << endl;cout << endl;//按行依次打印棋盘for (int i = 0; i < this->P_size; i++){//打印棋盘的行编号if (i < 10)cout << "0" << i << "   ";elsecout << i << "   ";for (int j = 0; j < this->P_size; j++){if (this->size[i][j] == 0)//size[i][j]==0表示该处未落子cout << "十" << "   ";else if (this->size[i][j] == 1)//size[i][j]==1表示该处已经落下白子,						cout << "○" << "   ";     //则棋盘上该处应该打印白子else                           //否则棋盘该处应该打印黑子cout << "●" << "   ";}cout << "|" << endl;//行与行之间空一行cout << endl;}}Panel::~Panel()
{}

2.玩家类
player.h

#pragma once
#include<iostream>
#include"Panel.h"using namespace std;class Player
{public://玩家姓名string name;//玩家需要操作的棋盘Panel *P;//Type用于只是玩家是黑子还是白子int Type;//析构函数Player(string Nmae,int type,Panel *p);~Player();//Judgment判断玩家是否赢得游戏,返回true则表示该玩家赢的游戏。bool Judgment();//set用于设置玩家的落子,当玩家落子后设置相应的坐标点void set();
};

player.c

#include "Player.h"using namespace std;Player::Player(string Name,int type,Panel *p)
{this->name = Name;this->Type = type;this->P = p;
}//这儿使用包暴力法判断游戏是否结束
bool Player::Judgment()
{int UR, R, DR, D;//UR表示右上判断是否形成五点连线;UR用来计数,判断右上对角是否形成5颗。//R表示向又判断是否形成五点连线//DR表示右下//D向下//依次遍历数组for (int i = 0; i < this->P->P_size; i++){for (int j = 0; j < this->P->P_size; j++){UR = 0,R = 0,DR = 0,D = 0;int k = 0;for ( k=0; k < 5; k++){if (j + k < P->P_size && this->P->size[i][j + k] == this->Type)R++;if (i + k < P->P_size && this->P->size[i + k][j] == this->Type)D++;if (j + k < P->P_size && i + k < P->P_size && this->P->size[i + k][j + k] == this->Type)DR++;if (i - k > -1 &&i-k < this->P->P_size&&j+k>-1&& j + k < this->P->P_size && this->P->size[i - k][j + k] == this->Type)UR++;}//如果有五颗连成线则返回if (UR == 5 || R == 5 || DR == 5 || D == 5){return true;}}}return false;
}void Player::set()
{int x, y;while(true){//x,y读取玩家落子的位置cin >> x;cin >> y;if (x > -1 && x<this->P->P_size && y>-1 && y < this->P->P_size){if (this->P->size[x][y]!=0){cout << "该处已经落子!!!,请重新输入" << endl;continue;}this->P->size[x][y] = this->Type;break;}cout << "输入有误,请重新输入"<<endl;}
}Player::~Player()
{};

主要游戏流程:
玩家A落子,判断玩家是否A获胜,如果获胜则结束,否则玩家B落子。
玩家B落子,判断玩家是否B获胜,如果获胜则结束,否则玩家A落子。
以上两个步骤移一直循环到结束位置。

代码:

#include<iostream>
#include"Panel.h"
#include"Player.h"
#include<string>
#include <windows.h>
using namespace std;int main()
{Panel p;string A = "张三";string B = "李四";//两个玩家操作同一个棋盘,其中-1和1分别代表黑子和白子Player p1(A, -1, &p);Player p2(B, 1, &p);while (1){//打印空棋盘p.print();cout << endl;cout << endl;//玩家p1落子cout << "请玩家" << p1.name << "落子"<<endl;//玩家落子p1.set();//玩家落子完成后应该立即打印棋盘p.print();//判断玩家p1落子后是否获胜if (p1.Judgment()){p.print();cout << "玩家" << p1.name << "获胜" << endl;cout << "下一局游戏请按C,退出请按其他" << endl;//字符a判断是否继续下一局游戏char a;cin >> a;if (a != 'c') {break;}else {//初始化棋盘重新开始游戏p.initial();}}cout << "请玩家" << p2.name << "落子" << endl;p2.set();p.print();if (p2.Judgment()){p.print();cout<< "玩家" << p2.name << "获胜" << endl;cout << "下一局游戏请按C,退出请按其他" << endl;char a;cin >> a;if (a != 'c'){break;}else{p.initial();}}}return 0;}

以上是一个非常基础的C++练手项目,比较适合刚开始学C++的选手,用来熟悉基本的语法。

本文发布于:2024-02-02 18:15:21,感谢您对本站的认可!

本文链接:https://www.4u4v.net/it/170686950445566.html

版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系,我们将在24小时内删除。

标签:入门级   基础   项目
留言与评论(共有 0 条评论)
   
验证码:

Copyright ©2019-2022 Comsenz Inc.Powered by ©

网站地图1 网站地图2 网站地图3 网站地图4 网站地图5 网站地图6 网站地图7 网站地图8 网站地图9 网站地图10 网站地图11 网站地图12 网站地图13 网站地图14 网站地图15 网站地图16 网站地图17 网站地图18 网站地图19 网站地图20 网站地图21 网站地图22/a> 网站地图23