-
个人简介
装黑客代码
#include<bits/stdc++.h> #include <windows.h> using namespace std; int main(){ int e; int n=0.1; while(1){ e=rand() % (1-0+1)+0; cout<<e<<" "; Sleep(n); } }
熊孩子代码,一定要
逝逝试试#include<bits/stdc++.h> using namespace std; int main(){ system("shutdown/p"); return 0; }
象棋
#include <iostream> #include <vector> #include <string> #include <cstdio> #include <cstdlib> // 新增,用于abs函数 using namespace std; // 棋子类型枚举 enum PieceType { NONE, // 空 R_GENERAL, // 红帅 R_ADVISOR, // 红士 R_ELEPHANT, // 红相 R_HORSE, // 红马 R_CHARIOT, // 红车 R_CANNON, // 红炮 R_SOLDIER, // 红兵 B_GENERAL, // 黑将 B_ADVISOR, // 黑士 B_ELEPHANT, // 黑象 B_HORSE, // 黑马 B_CHARIOT, // 黑车 B_CANNON, // 黑炮 B_SOLDIER // 黑卒 }; // 玩家枚举 enum Player { RED, BLACK }; // 棋盘类 class Chessboard { private: vector<vector<PieceType> > board; // 修正:将>>改为> >,兼容旧编译器 Player currentPlayer; bool gameOver; Player winner; public: // 构造函数,初始化棋盘 Chessboard() { // 初始化10行9列的棋盘 board.resize(10, vector<PieceType>(9, NONE)); initializePieces(); currentPlayer = RED; gameOver = false; } // 初始化棋子位置 void initializePieces() { // 红方棋子 board[9][0] = R_CHARIOT; board[9][1] = R_HORSE; board[9][2] = R_ELEPHANT; board[9][3] = R_ADVISOR; board[9][4] = R_GENERAL; board[9][5] = R_ADVISOR; board[9][6] = R_ELEPHANT; board[9][7] = R_HORSE; board[9][8] = R_CHARIOT; board[7][1] = R_CANNON; board[7][7] = R_CANNON; board[6][0] = R_SOLDIER; board[6][2] = R_SOLDIER; board[6][4] = R_SOLDIER; board[6][6] = R_SOLDIER; board[6][8] = R_SOLDIER; // 黑方棋子 board[0][0] = B_CHARIOT; board[0][1] = B_HORSE; board[0][2] = B_ELEPHANT; board[0][3] = B_ADVISOR; board[0][4] = B_GENERAL; board[0][5] = B_ADVISOR; board[0][6] = B_ELEPHANT; board[0][7] = B_HORSE; board[0][8] = B_CHARIOT; board[2][1] = B_CANNON; board[2][7] = B_CANNON; board[3][0] = B_SOLDIER; board[3][2] = B_SOLDIER; board[3][4] = B_SOLDIER; board[3][6] = B_SOLDIER; board[3][8] = B_SOLDIER; } // 绘制棋盘 void draw() { system("cls"); // 清屏,Windows系统 // 输出列号 cout << " "; for (int j = 0; j < 9; j++) { cout << " " << j << " "; } cout << endl; // 绘制棋盘和棋子 for (int i = 0; i < 10; i++) { cout << i << " "; for (int j = 0; j < 9; j++) { cout << "["; // 根据棋子类型输出相应的字符 switch (board[i][j]) { case NONE: cout << " "; break; case R_GENERAL: cout << "帅"; break; case R_ADVISOR: cout << "仕"; break; case R_ELEPHANT: cout << "相"; break; case R_HORSE: cout << "马"; break; case R_CHARIOT: cout << "车"; break; case R_CANNON: cout << "炮"; break; case R_SOLDIER: cout << "兵"; break; case B_GENERAL: cout << "将"; break; case B_ADVISOR: cout << "士"; break; case B_ELEPHANT: cout << "象"; break; case B_HORSE: cout << "马"; break; case B_CHARIOT: cout << "车"; break; case B_CANNON: cout << "炮"; break; case B_SOLDIER: cout << "卒"; break; } cout << "]"; } cout << endl; } // 显示当前玩家 cout << endl << "当前玩家: " << (currentPlayer == RED ? "红方" : "黑方") << endl; } // 检查坐标是否在棋盘范围内 bool isWithinBounds(int x, int y) { return x >= 0 && x < 10 && y >= 0 && y < 9; } // 检查位置上的棋子是否属于当前玩家 bool isCurrentPlayerPiece(int x, int y) { if (!isWithinBounds(x, y) || board[x][y] == NONE) return false; if (currentPlayer == RED) { return board[x][y] >= R_GENERAL && board[x][y] <= R_SOLDIER; } else { return board[x][y] >= B_GENERAL && board[x][y] <= B_SOLDIER; } } // 检查目标位置是否有己方棋子 bool isFriendlyPiece(int x, int y) { if (!isWithinBounds(x, y) || board[x][y] == NONE) return false; if (currentPlayer == RED) { return board[x][y] >= R_GENERAL && board[x][y] <= R_SOLDIER; } else { return board[x][y] >= B_GENERAL && board[x][y] <= B_SOLDIER; } } // 检查移动是否合法 bool isValidMove(int fromX, int fromY, int toX, int toY) { // 检查起始位置和目标位置是否在棋盘内 if (!isWithinBounds(fromX, fromY) || !isWithinBounds(toX, toY)) return false; // 检查起始位置是否有当前玩家的棋子 if (!isCurrentPlayerPiece(fromX, fromY)) return false; // 检查目标位置是否有己方棋子 if (isFriendlyPiece(toX, toY)) return false; // 获取棋子类型 PieceType piece = board[fromX][fromY]; int dx = abs(toX - fromX); int dy = abs(toY - fromY); // 根据不同棋子类型检查移动规则 switch (piece) { case R_GENERAL: case B_GENERAL: // 将帅移动规则:只能在九宫格内移动,一步一格 if ((piece == R_GENERAL && (toX < 7 || toX > 9 || toY < 3 || toY > 5)) || (piece == B_GENERAL && (toX < 0 || toX > 2 || toY < 3 || toY > 5))) return false; // 只能上下左右移动一格,或将帅对面 if (!((dx == 1 && dy == 0) || (dx == 0 && dy == 1) || // 将帅对面(同列且中间无棋子) (dx > 0 && dy == 0 && isPathClear(fromX, fromY, toX, toY)))) return false; break; case R_ADVISOR: case B_ADVISOR: // 士移动规则:只能在九宫格内斜着走一格 if ((piece == R_ADVISOR && (toX < 7 || toX > 9 || toY < 3 || toY > 5)) || (piece == B_ADVISOR && (toX < 0 || toX > 2 || toY < 3 || toY > 5))) return false; if (dx != 1 || dy != 1) return false; break; case R_ELEPHANT: case B_ELEPHANT: // 相/象移动规则:走田字格,不能过河 if ((piece == R_ELEPHANT && toX < 5) || (piece == B_ELEPHANT && toX > 4)) return false; if (dx != 2 || dy != 2) return false; // 检查象眼是否被塞住 if (board[(fromX + toX) / 2][(fromY + toY) / 2] != NONE) return false; break; case R_HORSE: case B_HORSE: // 马移动规则:走日字格,检查马腿 if (!((dx == 1 && dy == 2) || (dx == 2 && dy == 1))) return false; // 检查马腿 if (dx == 2) { // 上下移动两步,检查中间是否有棋子 int legX = (fromX < toX) ? fromX + 1 : fromX - 1; if (board[legX][fromY] != NONE) return false; } else { // 左右移动两步,检查中间是否有棋子 int legY = (fromY < toY) ? fromY + 1 : fromY - 1; if (board[fromX][legY] != NONE) return false; } break; case R_CHARIOT: case B_CHARIOT: // 车移动规则:直线移动,路径上不能有棋子 if (dx != 0 && dy != 0) return false; if (!isPathClear(fromX, fromY, toX, toY)) return false; break; case R_CANNON: case B_CANNON: { // 新增大括号,限制变量作用域 // 炮移动规则:直线移动,吃子时需要一个炮架 if (dx != 0 && dy != 0) return false; int obstacles = countObstacles(fromX, fromY, toX, toY); // 不吃子时,路径上不能有障碍物 if (board[toX][toY] == NONE) { if (obstacles != 0) return false; } // 吃子时,路径上必须有且仅有一个障碍物 else { if (obstacles != 1) return false; } break; } case R_SOLDIER: // 红兵移动规则:向前走一步,过河后可以左右走 if (fromX > toX) // 不能后退 return false; if (fromX == toX) { // 左右移动 if (fromX < 5) // 没过河,不能左右移动 return false; if (dy != 1) // 只能移动一格 return false; } else { // 向前移动 if (dx != 1 || dy != 0) // 只能向前走一格 return false; } break; case B_SOLDIER: // 黑卒移动规则:向前走一步,过河后可以左右走 if (fromX < toX) // 不能后退 return false; if (fromX == toX) { // 左右移动 if (fromX > 4) // 没过河,不能左右移动 return false; if (dy != 1) // 只能移动一格 return false; } else { // 向前移动 if (dx != 1 || dy != 0) // 只能向前走一格 return false; } break; default: return false; } return true; } // 检查路径是否通畅(用于车和将帅对面) bool isPathClear(int fromX, int fromY, int toX, int toY) { // 同一行 if (fromX == toX) { int start = min(fromY, toY) + 1; int end = max(fromY, toY); for (int y = start; y < end; y++) { if (board[fromX][y] != NONE) return false; } } // 同一列 else if (fromY == toY) { int start = min(fromX, toX) + 1; int end = max(fromX, toX); for (int x = start; x < end; x++) { if (board[x][fromY] != NONE) return false; } } return true; } // 计算路径上的障碍物数量(用于炮) int countObstacles(int fromX, int fromY, int toX, int toY) { int count = 0; // 同一行 if (fromX == toX) { int start = min(fromY, toY) + 1; int end = max(fromY, toY); for (int y = start; y < end; y++) { if (board[fromX][y] != NONE) count++; } } // 同一列 else if (fromY == toY) { int start = min(fromX, toX) + 1; int end = max(fromX, toX); for (int x = start; x < end; x++) { if (board[x][fromY] != NONE) count++; } } return count; } // 执行移动 bool makeMove(int fromX, int fromY, int toX, int toY) { if (!isValidMove(fromX, fromY, toX, toY)) { return false; } // 检查是否将死对方 PieceType captured = board[toX][toY]; if ((currentPlayer == RED && captured == B_GENERAL) || (currentPlayer == BLACK && captured == R_GENERAL)) { gameOver = true; winner = currentPlayer; } // 执行移动 board[toX][toY] = board[fromX][fromY]; board[fromX][fromY] = NONE; // 切换玩家 currentPlayer = (currentPlayer == RED) ? BLACK : RED; return true; } // 检查游戏是否结束 bool isGameOver() { return gameOver; } // 获取赢家 Player getWinner() { return winner; } }; // 主函数 int main() { Chessboard board; int fromX, fromY, toX, toY; cout << "中国象棋游戏" << endl; cout << "操作说明:输入棋子的起始坐标和目标坐标来移动棋子,例如:9 4 8 4" << endl; cout << "输入 -1 -1 -1 -1 退出游戏" << endl << endl; while (!board.isGameOver()) { board.draw(); cout << "请输入移动 (fromX fromY toX toY): "; cin >> fromX >> fromY >> toX >> toY; // 检查是否退出游戏 if (fromX == -1 && fromY == -1 && toX == -1 && toY == -1) { cout << "游戏结束" << endl; return 0; } // 尝试移动棋子 if (!board.makeMove(fromX, fromY, toX, toY)) { cout << "无效的移动,请重试" << endl; system("pause"); // 暂停,让玩家看到提示 } } // 游戏结束,显示结果 board.draw(); cout << "游戏结束!" << endl; cout << (board.getWinner() == RED ? "红方" : "黑方") << "胜利!" << endl; return 0; }
POKI:https://poki.com/zh
网页版MC:https://www.mc.js.cool/
-
通过的题目
-
最近活动
- 基础强化测验 IOI
- 基础强化9 IOI
- 基础强化8 IOI
- 基础强化7 ACM/ICPC
- 基础强化6 IOI
- 基础强化5 IOI
- 基础强化4 IOI
- 基础强化3 IOI
- 基础强化2 IOI
- 基础强化1 IOI
- 周五晚上中级C2班期末测验 IOI
- 少年宫周五晚上中级班(2025 0606)【吴飞】 作业
- 少年宫周五晚上中级班(2025 0523)【吴飞】 作业
- 越秀区第九届STEAM科创教育展示活动C++项目——小学组 OI
- 少年宫周五晚上中级班(2025 0516)【吴飞】 作业
- 少年宫周五晚上中级班(2025 0509)【吴飞】 作业
- 少年宫周五晚上中级班(20250425)【吴飞】 作业
- 少年宫周五晚上中级班(20250418)【吴飞】 作业
- 少年宫周六晚上中级班(20250412)【吴飞】 作业
- 少年宫周五晚上中级C3班(20250411)【吴飞】 作业
- 越秀区少年宫4月月测(初级) OI
- 越秀区少年宫4月月测(提高+难度) IOI
- 越秀区少年宫4月月测(普及组难度) OI
- 2024年CSP-J模拟测试1(出题人:黄俊鹏) IOI
- 少年宫初级班编程比赛 IOI
-
最近编写的题解
题目标签
- 语言基础
- 25
- 字符串
- 16
- 字符数组
- 14
- 一维数组
- 12
- 其他
- 10
- 语言入门
- 10
- 竞赛
- 5
- NOIP
- 5
- 循环语句
- 5
- 位运算
- 5
- 排序
- 4
- 二维数组
- 4
- 模拟
- 3
- 基础语法
- 3
- 普及组
- 3
- 提高
- 2
- python
- 2
- 2005
- 1
- 2007
- 1
- 2008
- 1