现在已经把游戏做出来了,需要程序应该为用户提供创建帐户的能力。一个帐户应该是一个结构类型变量,其中包含:一个用户名、一个密码和累计的输赢数。所有的帐户都应该存储在一个数据文件中,并由程序访问。一旦用户登录到游戏他们应该能够选择继续还是重新开始。
下面是目前完成情况 :
#include<stdio.h>
#include<stdlib.h>
#include<time.h>
#define MAX_ROW 3
#define MAX_COL 3
void init(char chess[MAX_ROW][MAX_COL]) {
for (int row = 0; row < MAX_ROW; row++) {
for (int col = 0; col < MAX_COL; col++) {
chess[row][col] = ' ';
}
}
}
void print(char chess[MAX_ROW][MAX_COL]) {
printf("=---+---+---=\n");
for (int row = 0; row < MAX_ROW; row++) {
printf("|");
for (int col = 0; col < MAX_COL; col++) {
printf(" %c |", chess[row][col]);
}
printf("\n=---+---+---=\n");
}
}
void print_chessBoard(char chessBoard[MAX_ROW][MAX_COL]) {
for (int row = 0; row < MAX_ROW; row++) {
for (int col = 0; col < MAX_COL; col++) {
printf("%c", chessBoard[row][col]);
}
printf("\n");
}
}
void plearMove(char chessBoard[MAX_ROW][MAX_COL]) {
printf("Player's failure...\n");
while (1) {
printf("Please enter coordinates.(row col): ");
int row = 0;
int col = 0;
scanf("%d %d", &row, &col);
if (row < 0 || row >= MAX_ROW || col < 0 || col >= MAX_COL) {
printf("Your input is wrong, please re-enter.\n");
continue;
}
if (chessBoard[row][col] != ' ') {
printf("The location you entered has been changed, please re-enter.\n");
continue;
}
chessBoard[row][col] = 'x';
break;
}
}
void computerMove(char chessBoard[MAX_ROW][MAX_COL]) {
srand((unsigned int)time(0));
while (1) {
int row = rand() % MAX_ROW;
int col = rand() % MAX_COL;
if (chessBoard[row][col] != ' ') {
continue;
}
chessBoard[row][col] = 'o';
break;
}
}
char isFull(char chessBoard[MAX_ROW][MAX_COL]) {
for (int row = 0; row < MAX_ROW; row++) {
for (int col = 0; col < MAX_ROW; col++) {
if (chessBoard[row][col] == ' ') {
return 0;
}
}
}
return 1;
}
char isGameOver(char chessBoard[MAX_ROW][MAX_COL]) {
for (int row = 0; row < MAX_ROW; row++) {
if (chessBoard[row][0] != ' '
&& chessBoard[row][0] == chessBoard[row][1]
&& chessBoard[row][0] == chessBoard[row][2]) {
return chessBoard[row][0];
}
}
for (int col = 0; col < MAX_COL; col++) {
if (chessBoard[0][col] != ' '
&& chessBoard[0][col] == chessBoard[1][col]
&& chessBoard[0][col] == chessBoard[2][col]) {
return chessBoard[0][col];
}
}
if (chessBoard[0][0] != ' '
&& chessBoard[0][0] == chessBoard[1][1]
&& chessBoard[0][0] == chessBoard[2][2]) {
return chessBoard[0][0];
}
if (chessBoard[0][2] != ' '
&& chessBoard[0][2] == chessBoard[1][1]
&& chessBoard[0][2] == chessBoard[2][0]) {
return chessBoard[0][2];
}
if (isFull(chessBoard)) {
return 'q';
}
return ' ';
}
int menu() {
printf("--------------------------\n");
printf("--------1.start the game--------\n");
printf("--------0.Exit the game--------\n");
printf("--------------------------\n");
int choice = 0;
printf("Please enter your choice.:");
scanf("%d", &choice);
return choice;
}
void game() {
char chessBoard[MAX_ROW][MAX_COL];
//Initialize chessboard
init(chessBoard);
char winner = ' ';
while (1) {
//Print chessboard
system("cls");
print(chessBoard);
//Player's failure
plearMove(chessBoard);
//Determine the outcome
winner = isGameOver(chessBoard);
if (winner != ' ') {
break;
}
//Computer loser
computerMove(chessBoard);
winner = isGameOver(chessBoard);
if (winner != ' ') {
break;
}
}
system("cls");
print(chessBoard);
if (winner == 'x') {
printf("You win\n");
}
else if (winner == 'o') {
printf("You lost\n");
}
else {
printf("Game draw\n");
}
}
int main() {
while (1) {
int choice = menu();
if (choice == 1) {
game();
}
else if (choice == 0) {
printf("Exit the game,GOODBYE!!!!!\n");
break;
}
else {
printf("Input error! Please re-enter!\n");
continue;
}
}
system("pause");
return 0;
}
```c
希望有大佬知道怎么添加所需目的
加好了。增加了用户增加菜单,用户登录菜单,用户增加函数,用户登录函数,用户成绩查询菜单及函数。
#include<stdio.h>
#include<stdlib.h>
#include<time.h>
#define MAX_ROW 3
#define MAX_COL 3
typedef struct _user
{
char username[20];
char password[20];
int win;
int loss;
int draw;
}user;
void init(char chess[MAX_ROW][MAX_COL]) {
for (int row = 0; row < MAX_ROW; row++) {
for (int col = 0; col < MAX_COL; col++) {
chess[row][col] = ' ';
}
}
}
void print(char chess[MAX_ROW][MAX_COL]) {
printf("=---+---+---=\n");
for (int row = 0; row < MAX_ROW; row++) {
printf("|");
for (int col = 0; col < MAX_COL; col++) {
printf(" %c |", chess[row][col]);
}
printf("\n=---+---+---=\n");
}
}
void print_chessBoard(char chessBoard[MAX_ROW][MAX_COL]) {
for (int row = 0; row < MAX_ROW; row++) {
for (int col = 0; col < MAX_COL; col++) {
printf("%c", chessBoard[row][col]);
}
printf("\n");
}
}
void plearMove(char chessBoard[MAX_ROW][MAX_COL]) {
printf("Player's failure...\n");
while (1) {
printf("Please enter coordinates.(row col): ");
int row = 0;
int col = 0;
scanf("%d %d", &row, &col);
if (row < 0 || row >= MAX_ROW || col < 0 || col >= MAX_COL) {
printf("Your input is wrong, please re-enter.\n");
continue;
}
if (chessBoard[row][col] != ' ') {
printf("The location you entered has been changed, please re-enter.\n");
continue;
}
chessBoard[row][col] = 'x';
break;
}
}
void computerMove(char chessBoard[MAX_ROW][MAX_COL]) {
srand((unsigned int)time(0));
while (1) {
int row = rand() % MAX_ROW;
int col = rand() % MAX_COL;
if (chessBoard[row][col] != ' ') {
continue;
}
chessBoard[row][col] = 'o';
break;
}
}
char isFull(char chessBoard[MAX_ROW][MAX_COL]) {
for (int row = 0; row < MAX_ROW; row++) {
for (int col = 0; col < MAX_ROW; col++) {
if (chessBoard[row][col] == ' ') {
return 0;
}
}
}
return 1;
}
char isGameOver(char chessBoard[MAX_ROW][MAX_COL]) {
for (int row = 0; row < MAX_ROW; row++) {
if (chessBoard[row][0] != ' '
&& chessBoard[row][0] == chessBoard[row][1]
&& chessBoard[row][0] == chessBoard[row][2]) {
return chessBoard[row][0];
}
}
for (int col = 0; col < MAX_COL; col++) {
if (chessBoard[0][col] != ' '
&& chessBoard[0][col] == chessBoard[1][col]
&& chessBoard[0][col] == chessBoard[2][col]) {
return chessBoard[0][col];
}
}
if (chessBoard[0][0] != ' '
&& chessBoard[0][0] == chessBoard[1][1]
&& chessBoard[0][0] == chessBoard[2][2]) {
return chessBoard[0][0];
}
if (chessBoard[0][2] != ' '
&& chessBoard[0][2] == chessBoard[1][1]
&& chessBoard[0][2] == chessBoard[2][0]) {
return chessBoard[0][2];
}
if (isFull(chessBoard)) {
return 'q';
}
return ' ';
}
int menu() {
printf("--------------------------\n");
printf("--------4.user login------------\n");
printf("--------3.Add user--------------\n");
printf("--------2.your score------------\n");
printf("--------1.start the game--------\n");
printf("--------0.Exit the game--------\n");
printf("--------------------------\n");
int choice = 0;
printf("Please enter your choice.:");
scanf("%d", &choice);
getchar();
return choice;
}
int game() {
char chessBoard[MAX_ROW][MAX_COL];
//Initialize chessboard
init(chessBoard);
char winner = ' ';
while (1)
{
//Print chessboard
system("cls");
print(chessBoard);
//Player's failure
plearMove(chessBoard);
//Determine the outcome
winner = isGameOver(chessBoard);
if (winner != ' ') {
break;
}
//Computer loser
computerMove(chessBoard);
winner = isGameOver(chessBoard);
if (winner != ' ') {
break;
}
}
system("cls");
print(chessBoard);
if (winner == 'x') {
printf("You win\n");
return 1;
}
else if (winner == 'o') {
printf("You lost\n");
return -1;
}
printf("Game draw\n");
return 0;
}
void loaduser(user *p,int *n)
{
FILE *fp = fopen("D:\\score.dat","r");
if(fp != NULL)
{
fread(n,sizeof(int),1,fp);
fread(p,sizeof(user),*n,fp);
fclose(fp);
}
}
void saveuser(user *p,int n)
{
FILE *fp = fopen("D:\\score.dat","w");
if(fp != NULL)
{
fwrite(&n,sizeof(int),1,fp);
fwrite(p,sizeof(user),n,fp);
fclose(fp);
}
}
int checkuser(user *p,int n)
{
char name[20],pass[20];
while(1)
{
printf("Input username:");
gets(name);
printf("Input password:");
gets(pass);
for(int i=0;i<n;i++)
{
if(strcmp(name,p[i].username) == 0 && strcmp(pass,p[i].password) == 0)
{
printf("%s is welcome!\n",name);
return i;
}
}
printf("username or password error! input again?(Y/N):");
char c = getchar();
getchar();
if(c == 'N')
break;
}
return -1;
}
void showscore(user *p,int nowuser)
{
printf("Your username is:%s\n",p[nowuser].username);
printf("Your score is:\n");
printf("Win:%d,Loss:%d,Draw:%d\n",p[nowuser].win,p[nowuser].loss,p[nowuser].draw);
}
int adduser(user *p, int *n)
{
char name[20],pass[20];
int i;
while(1)
{
printf("Input username:");
gets(name);
printf("Input password:");
gets(pass);
for(i=0;i<*n;i++)
{
if(strcmp(name,p[i].username) == 0)
break;
}
if(*n!=0 && i==*n)
{
printf("username is exist,input again?(Y/N):");
char c = getchar();
getchar();
if(c == 'N')
break;
}
strcpy(p[*n].username,name);
strcpy(p[*n].password,pass);
p[*n].draw = p[*n].loss = p[*n].win = 0;
(*n)++;
printf("user add OK\n");
return 1;
}
return -1;
}
int main() {
user u[1000];
int n=0;
int nowuser;
int res;
loaduser(u,&n);
while (1) {
int choice = menu();
if(choice == 4)
nowuser = checkuser(u,n);
else if(choice == 3)
{
if(adduser(u,&n) == 1)
{
n++;
}
}
else if(choice == 2)
if(nowuser >= 0)
showscore(u,nowuser);
else
printf("please login first!\n");
else if (choice == 1) {
if(nowuser >= 0)
{
res = game();
if(res == 1)
u[nowuser].win++;
else if(res==-1)
u[nowuser].loss++;
else
u[nowuser].draw++;
}
else
printf("please login first!\n");
}
else if (choice == 0) {
printf("Exit the game,GOODBYE!!!!!\n");
saveuser(u,n);
break;
}
else {
printf("Input error! Please re-enter!\n");
continue;
}
}
system("pause");
return 0;
}
完整的,你可以试试
C语言小游戏——井字棋
#include "game.h"
int main() {
int input = 0;
int cmp_x = 0;
int cmp_y = 0;
srand((unsigned int)time(NULL));
do {
game_head();
printf("输入1开始游戏>>");
scanf("%d", &input);
InitMap(arr, ROW, COL);
switch (input) {
case PLAY:
map();
while (is_end() == -1) {
play_game();
map();
cmp_game();
map();
}
if (is_win() == 'X') {
printf("玩家获胜\n");
}
else if (is_win() == 'O') {
printf("电脑获胜\n");
}
else {
printf("平局\n");
}
break;
case EXIT:
printf("游戏结束!\n");
break;
default:
printf("输入不合法,请重新输入\n");
}
} while (input != 0);
return 0;
}
完整的代码链接
http://t.csdn.cn/Try9F