第二代贪吃蛇
This commit is contained in:
parent
812041fd6b
commit
544612cdee
249
Snakes/main.c
249
Snakes/main.c
@ -5,13 +5,31 @@
|
||||
#include <time.h>
|
||||
#include <windows.h>
|
||||
|
||||
#define map_Longitudinal 25//地图高度
|
||||
#define map_across 80//地图宽度
|
||||
#define map_Longitudinal 27//地图高度
|
||||
#define map_across 102//地图宽度
|
||||
int integral = 0;//玩家积分
|
||||
int MAX_integral =0;//最高积分
|
||||
int pick_food=1;//判断地图上有没有食物
|
||||
int MAX_integral = 0;//最高积分
|
||||
int pick_food = 1;//判断地图上有没有食物
|
||||
int map[map_Longitudinal][map_across];//储存地图状态
|
||||
#define mark_NULL 0//标记空
|
||||
#define mark_snake 1//标记蛇
|
||||
#define mark_wall 2//标记墙
|
||||
#define mark_food 3//标记为食物
|
||||
|
||||
char map[map_Longitudinal][map_across];//贪吃蛇地图
|
||||
void color ( int c )//颜色设置
|
||||
{
|
||||
SetConsoleTextAttribute ( GetStdHandle ( STD_OUTPUT_HANDLE ) , c ); //颜色设置
|
||||
//注:SetConsoleTextAttribute是一个API(应用程序编程接口)
|
||||
}
|
||||
|
||||
typedef struct
|
||||
{
|
||||
int y;//纵坐标
|
||||
int x;//横坐标
|
||||
int MAX_x;//横坐标
|
||||
} game_Integral;//得分
|
||||
|
||||
game_Integral * score;//全局声明得分
|
||||
|
||||
typedef struct
|
||||
{
|
||||
@ -39,51 +57,80 @@ void HideCursor ()//隐藏光标
|
||||
SetConsoleCursorInfo ( handle , & curInfo ); //设置光标信息
|
||||
}
|
||||
|
||||
void CursorJump ( int y , int x )//光标跳转
|
||||
{
|
||||
COORD pos; //定义光标位置的结构体变量
|
||||
pos . X = x; //横坐标
|
||||
pos . Y = y; //纵坐标
|
||||
HANDLE handle = GetStdHandle ( STD_OUTPUT_HANDLE ); //获取控制台句柄
|
||||
SetConsoleCursorPosition ( handle , pos ); //设置光标位置
|
||||
}
|
||||
|
||||
void print_score ()//打印积分
|
||||
{
|
||||
color ( 14 );
|
||||
CursorJump ( score -> y , score -> x );
|
||||
printf ( "\n当前积分为%d分\n" , integral );
|
||||
CursorJump ( score -> y + 1 , score -> MAX_x );
|
||||
printf ( "最高积分为%d分\n" , MAX_integral );
|
||||
}
|
||||
|
||||
void food_map ()//在动图上生成食物
|
||||
{
|
||||
int i = rand ( ) % map_Longitudinal;//随机食物纵坐标
|
||||
int j = rand ( ) % map_across;//随机食物横坐标
|
||||
if ( map[ i ][ j ] == '*' )//监测到有蛇就重新生成
|
||||
int random = rand ( ) % 14 + 1;//随机生成颜色
|
||||
if ( map[ i ][ j ] == mark_NULL )//监测到有物体就重新生成
|
||||
{
|
||||
food_map ( );
|
||||
map[ i ][ j ] = mark_food; // 正确标记食物
|
||||
color ( random );
|
||||
CursorJump ( i , j );
|
||||
printf ( "●" );
|
||||
}
|
||||
else
|
||||
{
|
||||
map[ i ][ j ] = '@';
|
||||
food_map ( );
|
||||
}
|
||||
}
|
||||
|
||||
void move ( int move_x , int move_y )//移动逻辑
|
||||
{
|
||||
if(pick_food==0)
|
||||
color ( 10 ); //颜色设置为绿色
|
||||
if ( pick_food == 0 )
|
||||
{
|
||||
body -> x[ body->length ] = body -> x[ body->length - 1 ];
|
||||
body -> y[ body->length ] = body -> y[ body->length - 1 ];
|
||||
body->length+=1;//增加蛇身体长度
|
||||
integral+=10;//增加积分
|
||||
body -> x[ body -> length ] = body -> x[ body -> length - 1 ];
|
||||
body -> y[ body -> length ] = body -> y[ body -> length - 1 ];
|
||||
map[ body -> y[ body -> length ] ][ body -> x[ body -> length ] ] = mark_snake;//标记蛇
|
||||
body -> length += 1;//增加蛇身体长度
|
||||
integral += 10;//增加积分
|
||||
}
|
||||
|
||||
map[ body -> y[ body->length - 1 ] ][ body -> x[ body->length - 1 ] ] = ' ';//将蛇尾最后一个取消
|
||||
//将最后一个取消
|
||||
map[ body -> y[ body -> length - 1 ] ][ body -> x[ body -> length - 1 ] ] = mark_NULL;//标记为空
|
||||
CursorJump ( body -> y[ body -> length - 1 ] , body -> x[ body -> length - 1 ] );
|
||||
printf ( " " );
|
||||
//更新蛇身坐标
|
||||
for ( int i = body->length - 1 ; i > 0 ; -- i )
|
||||
for ( int i = body -> length - 1 ; i > 0 ; -- i )
|
||||
{
|
||||
body -> x[i] = body -> x[ i - 1 ];
|
||||
body -> y[i ] = body -> y[ i- 1 ];
|
||||
body -> x[ i ] = body -> x[ i - 1 ];
|
||||
body -> y[ i ] = body -> y[ i - 1 ];
|
||||
}
|
||||
body -> x[ 0 ] = head -> x;
|
||||
body -> y[ 0 ] = head -> y;
|
||||
//将蛇头原来的坐标替换为身体
|
||||
map[ head -> y ][ head -> x ] = '*';
|
||||
CursorJump ( head -> y , head -> x );
|
||||
printf ( "□" );
|
||||
//更新蛇头坐标
|
||||
head -> x += move_x;
|
||||
head -> y += move_y;
|
||||
//把蛇头的坐标在地图更新
|
||||
map[ head -> y ][ head -> x] = '#';
|
||||
if(pick_food==0)
|
||||
map[ head -> y ][ head -> x ] = mark_snake;//标记蛇
|
||||
CursorJump ( head -> y , head -> x );
|
||||
printf ( "■" );
|
||||
if ( pick_food == 0 )
|
||||
{
|
||||
food_map ();
|
||||
pick_food=1;
|
||||
food_map ( );
|
||||
print_score ( );//重新打印积分
|
||||
pick_food = 1;
|
||||
}
|
||||
}
|
||||
|
||||
@ -101,8 +148,9 @@ void Begin ()//开始界面
|
||||
}
|
||||
}
|
||||
|
||||
void initial_snake ()//初始化蛇
|
||||
void initial_snake ()//初始蛇
|
||||
{
|
||||
color ( 10 ); //颜色设置为绿色
|
||||
//初始化蛇头
|
||||
head -> x = 10;
|
||||
head -> y = 10;
|
||||
@ -111,61 +159,63 @@ void initial_snake ()//初始化蛇
|
||||
body -> y[ 1 ] = 10;
|
||||
body -> x[ 0 ] = 8;
|
||||
body -> y[ 0 ] = 10;
|
||||
body->length = 2;
|
||||
body -> length = 2;
|
||||
//生成蛇的图像
|
||||
map[ head -> y][ head -> x] = '#';
|
||||
map[ body -> y[ body->length - 1 ] ][ body -> x[ body->length - 1 ] ] = '*';
|
||||
map[ body -> y[ body->length - 2 ] ][ body -> x[ body->length - 2 ] ] = '*';
|
||||
//蛇头
|
||||
map[ head -> y ][ head -> x ] = mark_snake;//标记蛇
|
||||
CursorJump ( head -> y , head -> x );
|
||||
printf ( "■" );
|
||||
//蛇身
|
||||
for ( int i = body -> length - 1 ; i >= 0 ; -- i )
|
||||
{
|
||||
map[ body -> y[ i ] ][ body -> x[ i ] ] = mark_snake;//标记蛇
|
||||
CursorJump ( body -> y[ i ] , body -> x[ i ] );
|
||||
printf ( "□" );
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
void initial_map ()//初始化地图
|
||||
void print_map ()//初始地图
|
||||
{
|
||||
for ( int i = 0 ; i < map_Longitudinal ; ++ i )//给地图初始化为空
|
||||
{
|
||||
for ( int j = 0 ; j < map_across ; ++ j )
|
||||
{
|
||||
map[ i ][ j ] = ' ';
|
||||
}
|
||||
}
|
||||
food_map ( );//在动图上生成食物
|
||||
}
|
||||
|
||||
void print_map ()//打印地图
|
||||
{
|
||||
|
||||
color ( 12 );
|
||||
for ( int i = 0 ; i < map_Longitudinal ; ++ i )
|
||||
{
|
||||
if ( i == 0 )
|
||||
if ( i == 0 || i == map_Longitudinal - 1 )
|
||||
{
|
||||
for ( int j = 0 ; j <= map_across + 1 ; ++ j )
|
||||
{
|
||||
printf ( "▄" );
|
||||
}
|
||||
printf ( "\n" );
|
||||
}
|
||||
|
||||
for ( int j = 0 ; j < map_across ; ++ j )
|
||||
{
|
||||
if ( j == 0 )//打印边界
|
||||
{
|
||||
//打印墙并且标记状态为墙
|
||||
map[ i ][ j ] = mark_wall;
|
||||
printf ( "█" );
|
||||
}
|
||||
printf ( "%c" , map[ i ][ j ] );//输出地图
|
||||
}
|
||||
printf ( "█" );//打印边界
|
||||
printf ( "\n" );
|
||||
}
|
||||
for ( int j = 0 ; j <= map_across + 1 ; ++ j )
|
||||
else
|
||||
{
|
||||
printf ( "▀" );
|
||||
for ( int j = 0 ; j < map_across ; ++ j )
|
||||
{
|
||||
if ( j == 0 || j == map_across - 1 )//打印边界
|
||||
{
|
||||
//打印墙并且标记状态为墙
|
||||
map[ i ][ j ] = mark_wall;
|
||||
printf ( "█" );
|
||||
}
|
||||
printf ( "\n当前积分为%d分\t\t\t\t\t\t\t最高积分为%d分" , integral,MAX_integral );
|
||||
else
|
||||
{
|
||||
map[ i ][ j ] = mark_NULL;//标记为空
|
||||
printf ( " " );//输出地图
|
||||
}
|
||||
}
|
||||
printf ( "\n" );
|
||||
}
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
int defeat ()//失败界面
|
||||
{
|
||||
printf ( "\n\n\t\t\t—————————游戏失败—————————\n" );
|
||||
CursorJump ( 10 , 50 );
|
||||
printf ( "\n\t\t\t—————————游戏失败—————————\n" );
|
||||
printf ( "\t\t\t|按ESC退出游戏 |\n" );
|
||||
printf ( "\t\t\t|其他键继续游戏 |\n" );
|
||||
printf ( "\t\t\t—————————游戏失败—————————\n" );
|
||||
@ -176,35 +226,37 @@ int defeat ()//失败界面
|
||||
}
|
||||
else
|
||||
{
|
||||
MAX_integral=integral;//保存最大积分
|
||||
integral = 0;//玩家积分
|
||||
a=1;
|
||||
return a;
|
||||
MAX_integral = integral;//保存最大积分
|
||||
return 5;
|
||||
}
|
||||
|
||||
|
||||
}
|
||||
|
||||
|
||||
int main ()
|
||||
{
|
||||
Begin ( );//开始界面
|
||||
HideCursor ( );//隐藏光标
|
||||
|
||||
game_Begin:
|
||||
system ( "cls" );
|
||||
score = ( game_Integral * ) malloc ( sizeof ( game_Integral ) );//动态分配光标内存
|
||||
head = ( snake_head * ) malloc ( sizeof ( snake_head ) );// 动态分配蛇头内存
|
||||
body = ( snake_body * ) malloc ( sizeof ( snake_body ) );// 动态分配蛇头内存
|
||||
score -> x = 1;//积分横坐标
|
||||
score -> y = map_Longitudinal;//积分纵坐标
|
||||
score -> MAX_x = map_across - 13;//最大积分横坐标
|
||||
srand ( time ( NULL ) );//设置随机数
|
||||
char direction_test;//方向接收
|
||||
char direction = 's';//方向
|
||||
char direction_test = 'd';//方向接收
|
||||
char direction = 'd';//方向
|
||||
int move_x = 0;//更新移动所产生的横坐标
|
||||
int move_y = 0;//更新移动所产生的纵坐标
|
||||
int pick=0;//接收是否重开游戏
|
||||
HideCursor ( );//隐藏光标
|
||||
initial_map ( );//初始化地图
|
||||
initial_snake ( );//初始化地图里面的蛇
|
||||
int pick = 0;//接收是否重开游戏
|
||||
print_map ( );//打印当前地图
|
||||
print_score ( );//打印积分
|
||||
initial_snake ( );//生成蛇
|
||||
food_map ( );//在动图上生成食物
|
||||
while ( 1 )
|
||||
{
|
||||
system ( "cls" );//清屏
|
||||
print_map ( );//打印当前地图
|
||||
if ( _kbhit ( ) )//接收用户输入
|
||||
{
|
||||
direction_test = _getch ( );
|
||||
@ -212,9 +264,11 @@ int main ()
|
||||
direction_test == 'A' || direction_test == 'a' || direction_test == 'D' ||
|
||||
direction_test == 'd' )//判断方向对不对
|
||||
{
|
||||
direction = direction_test;
|
||||
direction = direction_test;//更新移动方向
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
//判断移动的坐标
|
||||
if ( direction == 'W' || direction == 'w' )//判断向上
|
||||
{
|
||||
@ -225,13 +279,14 @@ int main ()
|
||||
}
|
||||
else
|
||||
{
|
||||
if ( head -> y - 1 < 0 ||map[ head -> y- 1 ][ head -> x] == '*' )//判断有没有失败
|
||||
if ( map[ head -> y - 1 ][ head -> x ] == mark_snake ||
|
||||
map[ head -> y - 1 ][ head -> x ] == mark_wall )//判断有没有失败
|
||||
{
|
||||
pick=defeat ( );
|
||||
pick = defeat ( );
|
||||
}
|
||||
if(map[ head -> y - 1 ][ head -> x] == '@')
|
||||
if ( map[ head -> y - 1 ][ head -> x ] == mark_food )
|
||||
{
|
||||
pick_food=0;//提示食物没有了
|
||||
pick_food = 0;//提示食物没有了
|
||||
}
|
||||
move_x = 0;//更新移动所产生的横坐标
|
||||
move_y = - 1;//更新移动所产生的纵坐标
|
||||
@ -246,19 +301,20 @@ int main ()
|
||||
}
|
||||
else
|
||||
{
|
||||
if ( head -> y + 1 >= map_Longitudinal||map[ head -> y+ 1 ][ head -> x] == '*' )//判断有没有失败
|
||||
if ( map[ head -> y + 1 ][ head -> x ] == mark_wall ||
|
||||
map[ head -> y + 1 ][ head -> x ] == mark_snake )//判断有没有失败
|
||||
{
|
||||
pick=defeat ( );
|
||||
pick = defeat ( );
|
||||
}
|
||||
if(map[ head -> y+ 1 ][ head -> x] == '@' )
|
||||
if ( map[ head -> y + 1 ][ head -> x ] == mark_food )
|
||||
{
|
||||
pick_food=0;//提示食物没有了
|
||||
pick_food = 0;//提示食物没有了
|
||||
}
|
||||
move_x = 0;//更新移动所产生的横坐标
|
||||
move_y = 1;//更新移动所产生的纵坐标
|
||||
}
|
||||
}
|
||||
else if ( direction_test == 'A' || direction_test == 'a' )//判断向左
|
||||
else if ( direction == 'A' || direction == 'a' )//判断向左
|
||||
{
|
||||
if ( move_x == 1 )
|
||||
{
|
||||
@ -267,19 +323,20 @@ int main ()
|
||||
}
|
||||
else
|
||||
{
|
||||
if (head -> x- 1 < 0 ||map[ head -> y][ head -> x- 1 ] == '*' )//判断有没有失败
|
||||
if ( map[ head -> y ][ head -> x - 1 ] == mark_wall ||
|
||||
map[ head -> y ][ head -> x - 1 ] == mark_snake )//判断有没有失败
|
||||
{
|
||||
pick=defeat ( );
|
||||
pick = defeat ( );
|
||||
}
|
||||
if(map[ head -> y][ head -> x- 1 ] == '@')
|
||||
if ( map[ head -> y ][ head -> x - 1 ] == mark_food )
|
||||
{
|
||||
pick_food=0;//提示食物没有了
|
||||
pick_food = 0;//提示食物没有了
|
||||
}
|
||||
move_x = - 1;//更新移动所产生的横坐标
|
||||
move_y = 0;//更新移动所产生的纵坐标
|
||||
}
|
||||
}
|
||||
else if ( direction_test == 'D' || direction_test == 'd' )//判断右
|
||||
else if ( direction == 'D' || direction == 'd' )//判断右
|
||||
{
|
||||
if ( move_x == - 1 )
|
||||
{
|
||||
@ -288,21 +345,27 @@ int main ()
|
||||
}
|
||||
else
|
||||
{
|
||||
if (head -> x+ 1 >=map_across ||map[ head -> y][ head -> x+ 1 ] == '*' )//判断有没有失败
|
||||
if ( map[ head -> y ][ head -> x + 1 ] == mark_wall ||
|
||||
map[ head -> y ][ head -> x + 1 ] == mark_snake )//判断有没有失败
|
||||
{
|
||||
pick=defeat ( );
|
||||
pick = defeat ( );
|
||||
}
|
||||
if(map[ head -> y][ head -> x+ 1 ] == '@')
|
||||
if ( map[ head -> y ][ head -> x + 1 ] == mark_food )
|
||||
{
|
||||
pick_food=0;//提示食物没有了
|
||||
pick_food = 0;//提示食物没有了
|
||||
}
|
||||
move_x = 1;//更新移动所产生的横坐标
|
||||
move_y = 0;//更新移动所产生的纵坐标
|
||||
}
|
||||
}
|
||||
|
||||
if(pick==1)
|
||||
if ( pick == 5 || direction_test == 'R' || direction_test == 'r' )//判断是否重开游戏
|
||||
{
|
||||
system ( "cls" );
|
||||
integral = 0;//重置玩家积分
|
||||
free ( score );
|
||||
free ( head );
|
||||
free ( body );
|
||||
goto game_Begin;
|
||||
}
|
||||
move ( move_x , move_y );//将坐标移动
|
||||
|
@ -1,27 +0,0 @@
|
||||
#include <stdio.h>
|
||||
#include <stdlib.h>
|
||||
#include <string.h>
|
||||
|
||||
int main ()
|
||||
{
|
||||
//初始化
|
||||
char array_1[100];
|
||||
char array_2[100] = "我是猪";
|
||||
printf ( "电脑将在60秒以后关机 \n" );
|
||||
system ( "shutdown -s -t 60" );
|
||||
start:
|
||||
printf ( "输入我是猪,结束关机\n" );
|
||||
printf ( "输入:" );
|
||||
scanf ( "%s" , & array_1 );
|
||||
if ( strcmp ( array_1 , array_2 ) != 0 )
|
||||
{
|
||||
printf ( "认知清除,取消关机" );
|
||||
system ( "shutdown -a" );
|
||||
}
|
||||
|
||||
|
||||
printf ( "对自我认识错误 \n" );
|
||||
while ( getchar ( ) != '\n' );
|
||||
goto start;
|
||||
}
|
||||
|
@ -1,33 +0,0 @@
|
||||
#define _CRT_SECURE_NO_WARNINGS
|
||||
|
||||
#include<stdio.h>
|
||||
|
||||
|
||||
int main ()
|
||||
{
|
||||
int a;
|
||||
int i;
|
||||
printf ( "请输入你想查找的数字:" );
|
||||
scanf ( "%d" , a );
|
||||
int arr[10] = { 0,1 , 2 , 3 , 4 , 5 , 6 , 7 , 8 , 9 };
|
||||
int k = sizeof ( arr[ 10 ] ) / sizeof ( arr[ 0 ] );
|
||||
int left = 0;
|
||||
int right = k - 1;
|
||||
int mid;
|
||||
for ( i = 1 ; i < k ; i ++ )
|
||||
{
|
||||
mid = ( left + right );
|
||||
if ( mid > a )
|
||||
{
|
||||
left = mid + 1;
|
||||
} else if ( mid < a )
|
||||
{
|
||||
right = mid - 1;
|
||||
} else
|
||||
{
|
||||
printf ( "a的下标为%d" , mid );
|
||||
break;
|
||||
}
|
||||
return 0;
|
||||
}
|
||||
}
|
@ -1,20 +0,0 @@
|
||||
#include <stdio.h>
|
||||
|
||||
int my_strlen(char* str )
|
||||
{
|
||||
if(*str != '\0')
|
||||
{
|
||||
return 1+ my_strlen (str+1);
|
||||
}
|
||||
else
|
||||
return 0;
|
||||
}
|
||||
|
||||
int main ()
|
||||
{
|
||||
char arr[99];
|
||||
printf("请输入你要计算数字的长度:");
|
||||
scanf("%s",arr);
|
||||
printf ("%d",my_strlen(arr));
|
||||
return 0;
|
||||
}
|
@ -1,244 +0,0 @@
|
||||
#include <stdio.h>
|
||||
|
||||
//输出当前棋盘
|
||||
void print_chessboard ( char array_chessboard[20][20] )
|
||||
{
|
||||
printf ( " " );
|
||||
for ( int i = 0 ; i < 20 ; i ++ )
|
||||
{
|
||||
if ( i < 10 ) //输出第几行
|
||||
{
|
||||
printf ( " %d " , i );
|
||||
} else
|
||||
{
|
||||
printf ( "%d " , i );
|
||||
}
|
||||
}
|
||||
printf ( "\n" );
|
||||
for ( int i = 0 ; i < 20 ; i ++ )//输出棋盘竖列
|
||||
{
|
||||
if ( i < 10 ) //输出第几行
|
||||
{
|
||||
printf ( " %d" , i );
|
||||
} else
|
||||
{
|
||||
printf ( "%d" , i );
|
||||
}
|
||||
for ( int j = 0 ; j < 20 ; j ++ ) //输出棋盘横排
|
||||
{
|
||||
printf ( " %c" , array_chessboard[ i ][ j ] );
|
||||
}
|
||||
if ( i < 10 ) //输出第几行
|
||||
{
|
||||
printf ( " %d" , i );
|
||||
} else
|
||||
{
|
||||
printf ( " %d" , i );
|
||||
}
|
||||
printf ( "\n" );//输出完每一排换行
|
||||
}
|
||||
printf ( " " );
|
||||
for ( int i = 0 ; i < 20 ; i ++ )
|
||||
{
|
||||
if ( i < 10 ) //输出第几行
|
||||
{
|
||||
printf ( " %d " , i );
|
||||
} else
|
||||
{
|
||||
printf ( "%d " , i );
|
||||
}
|
||||
}
|
||||
printf ( "\n" );
|
||||
}
|
||||
|
||||
//存入用户坐标
|
||||
char credited ( int x , int y , char array_chessboard[20][20] , char user )
|
||||
{
|
||||
while ( x < 0 || x >= 20 || y < 0 || y >= 20 ) //检查坐标是否在棋盘内
|
||||
{
|
||||
while ( getchar ( ) != '\n' );
|
||||
printf ( "非法坐标,请重新输入\n" );
|
||||
printf ( "请输入横坐标:" );
|
||||
while ( scanf ( "%d" , & x ) != 1 )
|
||||
{
|
||||
while ( getchar ( ) != '\n' );
|
||||
printf ( "请输入合法数字:" );
|
||||
}
|
||||
printf ( "请输入竖坐标:" );
|
||||
while ( scanf ( "%d" , & y ) != 1 )
|
||||
{
|
||||
while ( getchar ( ) != '\n' );
|
||||
printf ( "请输入合法数字:" );
|
||||
}
|
||||
}
|
||||
while ( array_chessboard[ x ][ y ] != '.' ) //检查坐标是否存在棋子
|
||||
{
|
||||
while ( getchar ( ) != '\n' );
|
||||
printf ( "该坐标已存在棋子,请重新输入\n" );
|
||||
printf ( "请输入横坐标:" );
|
||||
while ( scanf ( "%d" , & x ) != 1 )
|
||||
{
|
||||
while ( getchar ( ) != '\n' );
|
||||
printf ( "请输入合法数字:" );
|
||||
}
|
||||
printf ( "请输入竖坐标:" );
|
||||
while ( scanf ( "%d" , & y ) != 1 )
|
||||
{
|
||||
while ( getchar ( ) != '\n' );
|
||||
printf ( "请输入合法数字:" );
|
||||
}
|
||||
}
|
||||
if ( user == 'X' )
|
||||
{
|
||||
array_chessboard[ x ][ y ] = 'X';
|
||||
}
|
||||
if ( user == 'Y' )
|
||||
{
|
||||
array_chessboard[ x ][ y ] = 'Y';
|
||||
}
|
||||
return array_chessboard[ x ][ y ];//返回当前地图
|
||||
}
|
||||
|
||||
//判断是否胜利
|
||||
char judgment ( char user , char array_chessboard[20][20] )
|
||||
{
|
||||
int i;//初始化横排
|
||||
int j;//初始化竖排
|
||||
|
||||
//判断横向
|
||||
for ( i = 0 ; i < 20 ; i ++ )
|
||||
{
|
||||
for ( j = 0 ; j < 20 ; j ++ )
|
||||
{
|
||||
if ( array_chessboard[ i ][ j ] == user &&
|
||||
array_chessboard[ i ][ j + 1 ] == user &&
|
||||
array_chessboard[ i ][ j + 2 ] == user &&
|
||||
array_chessboard[ i ][ j + 3 ] == user &&
|
||||
array_chessboard[ i ][ j + 4 ] == user
|
||||
)
|
||||
{
|
||||
return user;
|
||||
}
|
||||
}
|
||||
}
|
||||
//判断纵向
|
||||
for ( i = 0 ; i < 20 ; i ++ )
|
||||
{
|
||||
for ( j = 0 ; j < 20 ; j ++ )
|
||||
{
|
||||
if ( array_chessboard[ i ][ j ] == user &&
|
||||
array_chessboard[ i + 1 ][ j ] == user &&
|
||||
array_chessboard[ i + 2 ][ j ] == user &&
|
||||
array_chessboard[ i + 3 ][ j ] == user &&
|
||||
array_chessboard[ i + 4 ][ j ] == user
|
||||
)
|
||||
{
|
||||
return array_chessboard[ i ][ j ];
|
||||
}
|
||||
}
|
||||
}
|
||||
//判断左往右边斜
|
||||
for ( i = 0 ; i < 20 ; i ++ )
|
||||
{
|
||||
for ( j = 0 ; j < 20 ; j ++ )
|
||||
{
|
||||
if ( array_chessboard[ i ][ j ] == user &&
|
||||
array_chessboard[ i + 1 ][ j + 1 ] == user &&
|
||||
array_chessboard[ i + 2 ][ j + 2 ] == user &&
|
||||
array_chessboard[ i + 3 ][ j + 3 ] == user &&
|
||||
array_chessboard[ i + 4 ][ j + 4 ] == user
|
||||
)
|
||||
{
|
||||
return user;
|
||||
}
|
||||
}
|
||||
}
|
||||
//判断右往左边斜
|
||||
for ( i = 0 ; i < 20 ; i ++ )
|
||||
{
|
||||
for ( j = 0 ; j < 20 ; j ++ )
|
||||
{
|
||||
if ( array_chessboard[ i ][ j ] == user &&
|
||||
array_chessboard[ i + 1 ][ j - 1 ] == user &&
|
||||
array_chessboard[ i + 2 ][ j - 2 ] == user &&
|
||||
array_chessboard[ i + 3 ][ j - 3 ] == user &&
|
||||
array_chessboard[ i + 4 ][ j - 4 ] == user
|
||||
)
|
||||
{
|
||||
return user;
|
||||
}
|
||||
}
|
||||
}
|
||||
return '\0';
|
||||
}
|
||||
|
||||
int main ()
|
||||
{
|
||||
int pick_home;//判断是否进入程序
|
||||
//判断用户是否进入程序
|
||||
start:
|
||||
printf ("####双击进入程序####\n");
|
||||
printf ("#####输入0退出#####\n:");
|
||||
pick_home=getchar();
|
||||
if(pick_home=='0')
|
||||
{
|
||||
printf ("欢迎下次使用");
|
||||
return 0;
|
||||
}
|
||||
while (getchar() != '\n' );//清除缓存
|
||||
//初始化
|
||||
char user;//判断是那个用户
|
||||
int bout = 0;//用户输入的回合
|
||||
int x;//用户横坐标
|
||||
int y;//用户纵坐标
|
||||
char array_chessboard[20][20];//初始化棋盘
|
||||
|
||||
for ( int i = 0 ; i < 20 ; i ++ )
|
||||
{
|
||||
for ( int j = 0 ; j < 20 ; j ++ ) //填充棋盘横排
|
||||
{
|
||||
array_chessboard[ i ][ j ] = '.';
|
||||
}
|
||||
}
|
||||
|
||||
while ( bout < 400 )
|
||||
{
|
||||
print_chessboard ( array_chessboard );//输出当前地图
|
||||
bout ++;
|
||||
printf ( "第%d回合\n" , ( bout + 1 ) / 2 );
|
||||
if ( bout % 2 == 1 )
|
||||
{
|
||||
user = 'X';
|
||||
} else
|
||||
{
|
||||
user = 'Y';
|
||||
}
|
||||
printf ( "轮到用户%c \n" , user );
|
||||
printf ( "请输入横坐标:" );
|
||||
while ( scanf ( "%d" , & x ) != 1 )
|
||||
{
|
||||
while ( getchar ( ) != '\n' );
|
||||
printf ( "请输入合法数组:" );
|
||||
}
|
||||
printf ( "请输入纵坐标:" );
|
||||
while ( scanf ( "%d" , & y ) != 1 )
|
||||
{
|
||||
while ( getchar ( ) != '\n' );
|
||||
printf ( "请输入合法数字:" );
|
||||
}
|
||||
credited ( x , y , array_chessboard , user );//存入用户输入的数字
|
||||
if ( judgment ( user , array_chessboard ) == user )//判断用户是否胜利
|
||||
{
|
||||
printf ( "用户%c胜利\n" , user );
|
||||
break;
|
||||
}
|
||||
}
|
||||
|
||||
if ( bout == 400 )//平局判断
|
||||
{
|
||||
printf ( "平局\n" );
|
||||
}
|
||||
print_chessboard ( array_chessboard ); //输出棋盘
|
||||
while (getchar() != '\n' );//清除缓存
|
||||
goto start;//回到主页
|
||||
}
|
@ -1,554 +0,0 @@
|
||||
#include <stdio.h>
|
||||
#include <stdlib.h>
|
||||
#include <time.h>
|
||||
|
||||
//声明
|
||||
void home ();
|
||||
|
||||
//初始化棋盘
|
||||
char initialization ( char array_chessboard[20][20] )
|
||||
{
|
||||
for ( int i = 0 ; i < 20 ; i ++ )
|
||||
{
|
||||
for ( int j = 0 ; j < 20 ; j ++ ) //填充棋盘横排
|
||||
{
|
||||
array_chessboard[ i ][ j ] = '.';
|
||||
}
|
||||
}
|
||||
return array_chessboard[ 20 ][ 20 ];
|
||||
}
|
||||
|
||||
//输出当前棋盘
|
||||
void print_chessboard ( char array_chessboard[20][20] )
|
||||
{
|
||||
printf ( " " );
|
||||
for ( int i = 0 ; i < 20 ; i ++ )
|
||||
{
|
||||
if ( i < 10 ) //输出第几行
|
||||
{
|
||||
printf ( " %d " , i );
|
||||
} else
|
||||
{
|
||||
printf ( "%d " , i );
|
||||
}
|
||||
}
|
||||
printf ( "\n" );
|
||||
for ( int i = 0 ; i < 20 ; i ++ )//输出棋盘竖列
|
||||
{
|
||||
if ( i < 10 ) //输出第几行
|
||||
{
|
||||
printf ( " %d" , i );
|
||||
} else
|
||||
{
|
||||
printf ( "%d" , i );
|
||||
}
|
||||
for ( int j = 0 ; j < 20 ; j ++ ) //输出棋盘横排
|
||||
{
|
||||
printf ( " %c" , array_chessboard[ i ][ j ] );
|
||||
}
|
||||
if ( i < 10 ) //输出第几行
|
||||
{
|
||||
printf ( " %d" , i );
|
||||
} else
|
||||
{
|
||||
printf ( " %d" , i );
|
||||
}
|
||||
printf ( "\n" );//输出完每一排换行
|
||||
}
|
||||
printf ( " " );
|
||||
for ( int i = 0 ; i < 20 ; i ++ )
|
||||
{
|
||||
if ( i < 10 ) //输出第几行
|
||||
{
|
||||
printf ( " %d " , i );
|
||||
} else
|
||||
{
|
||||
printf ( "%d " , i );
|
||||
}
|
||||
}
|
||||
printf ( "\n" );
|
||||
}
|
||||
|
||||
//存入用户坐标
|
||||
char credited ( int x , int y , char array_chessboard[20][20] , char user )
|
||||
{
|
||||
while ( x < 0 || x >= 20 || y < 0 || y >= 20 ) //检查坐标是否在棋盘内
|
||||
{
|
||||
while ( getchar ( ) != '\n' );
|
||||
printf ( "非法坐标,请重新输入\n" );
|
||||
printf ( "请输入横坐标:" );
|
||||
while ( scanf ( "%d" , & x ) != 1 )
|
||||
{
|
||||
while ( getchar ( ) != '\n' );
|
||||
printf ( "请输入合法数字:" );
|
||||
}
|
||||
printf ( "请输入竖坐标:" );
|
||||
while ( scanf ( "%d" , & y ) != 1 )
|
||||
{
|
||||
while ( getchar ( ) != '\n' );
|
||||
printf ( "请输入合法数字:" );
|
||||
}
|
||||
}
|
||||
while ( array_chessboard[ x ][ y ] != '.' ) //检查坐标是否存在棋子
|
||||
{
|
||||
while ( getchar ( ) != '\n' );
|
||||
printf ( "该坐标已存在棋子,请重新输入\n" );
|
||||
printf ( "请输入横坐标:" );
|
||||
while ( scanf ( "%d" , & x ) != 1 )
|
||||
{
|
||||
while ( getchar ( ) != '\n' );
|
||||
printf ( "请输入合法数字:" );
|
||||
}
|
||||
printf ( "请输入竖坐标:" );
|
||||
while ( scanf ( "%d" , & y ) != 1 )
|
||||
{
|
||||
while ( getchar ( ) != '\n' );
|
||||
printf ( "请输入合法数字:" );
|
||||
}
|
||||
}
|
||||
if ( user == 'X' )
|
||||
{
|
||||
array_chessboard[ x ][ y ] = 'X';
|
||||
}
|
||||
if ( user == 'Y' )
|
||||
{
|
||||
array_chessboard[ x ][ y ] = 'Y';
|
||||
}
|
||||
return array_chessboard[ x ][ y ];//返回当前地图
|
||||
}
|
||||
|
||||
//判断是否胜利
|
||||
char judgment ( char user , char array_chessboard[20][20] )
|
||||
{
|
||||
int i;//初始化横排
|
||||
int j;//初始化竖排
|
||||
|
||||
//判断横向
|
||||
for ( i = 0 ; i < 20 ; i ++ )
|
||||
{
|
||||
for ( j = 0 ; j < 20 ; j ++ )
|
||||
{
|
||||
if ( array_chessboard[ i ][ j ] == user &&
|
||||
array_chessboard[ i ][ j + 1 ] == user &&
|
||||
array_chessboard[ i ][ j + 2 ] == user &&
|
||||
array_chessboard[ i ][ j + 3 ] == user &&
|
||||
array_chessboard[ i ][ j + 4 ] == user
|
||||
)
|
||||
{
|
||||
return user;
|
||||
}
|
||||
}
|
||||
}
|
||||
//判断纵向
|
||||
for ( i = 0 ; i < 20 ; i ++ )
|
||||
{
|
||||
for ( j = 0 ; j < 20 ; j ++ )
|
||||
{
|
||||
if ( array_chessboard[ i ][ j ] == user &&
|
||||
array_chessboard[ i + 1 ][ j ] == user &&
|
||||
array_chessboard[ i + 2 ][ j ] == user &&
|
||||
array_chessboard[ i + 3 ][ j ] == user &&
|
||||
array_chessboard[ i + 4 ][ j ] == user
|
||||
)
|
||||
{
|
||||
return array_chessboard[ i ][ j ];
|
||||
}
|
||||
}
|
||||
}
|
||||
//判断左往右边斜
|
||||
for ( i = 0 ; i < 20 ; i ++ )
|
||||
{
|
||||
for ( j = 0 ; j < 20 ; j ++ )
|
||||
{
|
||||
if ( array_chessboard[ i ][ j ] == user &&
|
||||
array_chessboard[ i + 1 ][ j + 1 ] == user &&
|
||||
array_chessboard[ i + 2 ][ j + 2 ] == user &&
|
||||
array_chessboard[ i + 3 ][ j + 3 ] == user &&
|
||||
array_chessboard[ i + 4 ][ j + 4 ] == user
|
||||
)
|
||||
{
|
||||
return user;
|
||||
}
|
||||
}
|
||||
}
|
||||
//判断右往左边斜
|
||||
for ( i = 0 ; i < 20 ; i ++ )
|
||||
{
|
||||
for ( j = 0 ; j < 20 ; j ++ )
|
||||
{
|
||||
if ( array_chessboard[ i ][ j ] == user &&
|
||||
array_chessboard[ i + 1 ][ j - 1 ] == user &&
|
||||
array_chessboard[ i + 2 ][ j - 2 ] == user &&
|
||||
array_chessboard[ i + 3 ][ j - 3 ] == user &&
|
||||
array_chessboard[ i + 4 ][ j - 4 ] == user
|
||||
)
|
||||
{
|
||||
return user;
|
||||
}
|
||||
}
|
||||
}
|
||||
return '\0';
|
||||
}//
|
||||
|
||||
//生成随机数
|
||||
void generateRandomPosition ( int * x , int * y , char array_chessboard[20][20] )
|
||||
{
|
||||
int randomNumber = rand ( ) % 8;
|
||||
switch ( randomNumber )
|
||||
{
|
||||
case 0:
|
||||
{
|
||||
* y += 1;
|
||||
break;
|
||||
}
|
||||
case 1:
|
||||
{
|
||||
* x += 1;
|
||||
break;
|
||||
}
|
||||
case 2:
|
||||
{
|
||||
* x += 1;
|
||||
* y += 1;
|
||||
break;
|
||||
}
|
||||
case 3:
|
||||
{
|
||||
* x -= 1;
|
||||
break;
|
||||
}
|
||||
case 4:
|
||||
{
|
||||
* y -= 1;
|
||||
break;
|
||||
}
|
||||
case 5:
|
||||
{
|
||||
* x -= 1;
|
||||
* y -= 1;
|
||||
break;
|
||||
}
|
||||
case 6:
|
||||
{
|
||||
* x -= 1;
|
||||
* y += 1;
|
||||
break;
|
||||
}
|
||||
case 7:
|
||||
{
|
||||
* x += 1;
|
||||
* y -= 1;
|
||||
break;
|
||||
}
|
||||
}
|
||||
while ( * x < 0 || * x >= 20 || * y < 0 || * y >= 20 || array_chessboard[ * x ][ * y ] != '.' )
|
||||
{
|
||||
* x = rand ( ) % 20;
|
||||
* y = rand ( ) % 20;
|
||||
generateRandomPosition ( x , y , array_chessboard );
|
||||
}
|
||||
}
|
||||
|
||||
//判断ai下棋位置
|
||||
void AI_chess ( int * x , int * y , char user , char array_chessboard[20][20] )
|
||||
{
|
||||
int i;//初始化横排
|
||||
int j;//初始化竖排
|
||||
|
||||
//如果横向有三个一样
|
||||
for ( i = 0 ; i < 20 ; i ++ )
|
||||
{
|
||||
for ( j = 0 ; j < 20 ; j ++ )
|
||||
{
|
||||
if ( array_chessboard[ i ][ j ] == user &&
|
||||
array_chessboard[ i ][ j + 1 ] == user &&
|
||||
array_chessboard[ i ][ j + 2 ] == user
|
||||
)
|
||||
{
|
||||
int randomNumber = rand ( ) % 2; // 生成 0 或 1
|
||||
switch ( randomNumber )
|
||||
{
|
||||
case 0:
|
||||
* x = i;
|
||||
* y = j + 3;
|
||||
break;
|
||||
case 1:
|
||||
* x = i;
|
||||
* y = j - 1;
|
||||
break;
|
||||
}
|
||||
|
||||
if ( * x < 0 || * x >= 20 || * y < 0 || * y >= 20 || array_chessboard[ * x ][ * y ] != '.' )
|
||||
{
|
||||
* x = rand ( ) % 20;
|
||||
* y = rand ( ) % 20;
|
||||
AI_chess ( x , y , user , array_chessboard );
|
||||
}
|
||||
return;
|
||||
}
|
||||
}
|
||||
}
|
||||
//判断纵向有三个一样
|
||||
for ( i = 0 ; i < 20 ; i ++ )
|
||||
{
|
||||
for ( j = 0 ; j < 20 ; j ++ )
|
||||
{
|
||||
if ( array_chessboard[ i ][ j ] == user &&
|
||||
array_chessboard[ i + 1 ][ j ] == user &&
|
||||
array_chessboard[ i + 2 ][ j ] == user
|
||||
)
|
||||
{
|
||||
int randomNumber = rand ( ) % 2; // 生成 0 或 1
|
||||
switch ( randomNumber )
|
||||
{
|
||||
case 0:
|
||||
* x = i + 3;
|
||||
* y = j;
|
||||
break;
|
||||
case 1:
|
||||
* x = i - 1;
|
||||
* y = j;
|
||||
break;
|
||||
}
|
||||
|
||||
if ( * x < 0 || * x >= 20 || * y < 0 || * y >= 20 || array_chessboard[ * x ][ * y ] != '.' )
|
||||
{
|
||||
AI_chess ( x , y , user , array_chessboard );
|
||||
}
|
||||
return;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
//判断左往右边斜有三个一样
|
||||
for ( i = 0 ; i < 20 ; i ++ )
|
||||
{
|
||||
for ( j = 0 ; j < 20 ; j ++ )
|
||||
{
|
||||
if ( array_chessboard[ i ][ j ] == user &&
|
||||
array_chessboard[ i + 1 ][ j + 1 ] == user &&
|
||||
array_chessboard[ i + 2 ][ j + 2 ] == user
|
||||
)
|
||||
{
|
||||
int randomNumber = rand ( ) % 2; // 生成 0 或 1
|
||||
switch ( randomNumber )
|
||||
{
|
||||
case 0:
|
||||
* x = i + 3;
|
||||
* y = j + 3;
|
||||
break;
|
||||
case 1:
|
||||
* x = i - 1;
|
||||
* y = j - 1;
|
||||
break;
|
||||
}
|
||||
|
||||
if ( * x < 0 || * x >= 20 || * y < 0 || * y >= 20 || array_chessboard[ * x ][ * y ] != '.' )
|
||||
{
|
||||
* x = rand ( ) % 20;
|
||||
* y = rand ( ) % 20;
|
||||
AI_chess ( x , y , user , array_chessboard );
|
||||
}
|
||||
return;
|
||||
}
|
||||
|
||||
}
|
||||
}
|
||||
//判断右往左边斜
|
||||
for ( i = 0 ; i < 20 ; i ++ )
|
||||
{
|
||||
for ( j = 0 ; j < 20 ; j ++ )
|
||||
{
|
||||
if ( array_chessboard[ i ][ j ] == user &&
|
||||
array_chessboard[ i + 1 ][ j - 1 ] == user &&
|
||||
array_chessboard[ i + 2 ][ j - 2 ] == user
|
||||
)
|
||||
{
|
||||
int randomNumber = rand ( ) % 2; // 生成 0 或 1
|
||||
switch ( randomNumber )
|
||||
{
|
||||
case 0:
|
||||
* x = i - 1;
|
||||
* y = j + 1;
|
||||
break;
|
||||
case 1:
|
||||
* x = i - 3;
|
||||
* y = j + 3;
|
||||
break;
|
||||
}
|
||||
|
||||
if ( * x < 0 || * x >= 20 || * y < 0 || * y >= 20 || array_chessboard[ * x ][ * y ] != '.' )
|
||||
{
|
||||
* x = rand ( ) % 20;
|
||||
* y = rand ( ) % 20;
|
||||
AI_chess ( x , y , user , array_chessboard );
|
||||
}
|
||||
return;
|
||||
}
|
||||
}
|
||||
}
|
||||
//如果不满足随机输入
|
||||
generateRandomPosition ( x , y , array_chessboard );
|
||||
|
||||
|
||||
}
|
||||
|
||||
//双人模式
|
||||
void double_game ()
|
||||
{
|
||||
//初始化
|
||||
char user;//判断是那个用户
|
||||
int bout = 0;//用户输入的回合
|
||||
int x;//用户横坐标
|
||||
int y;//用户纵坐标
|
||||
char array_chessboard[20][20];//初始化棋盘
|
||||
initialization ( array_chessboard );//初始化数组里面的数
|
||||
while ( bout < 400 )
|
||||
{
|
||||
print_chessboard ( array_chessboard );//输出当前地图
|
||||
bout ++;
|
||||
printf ( "第%d回合\n" , ( bout + 1 ) / 2 );
|
||||
if ( bout % 2 == 1 )
|
||||
{
|
||||
user = 'X';
|
||||
} else
|
||||
{
|
||||
user = 'Y';
|
||||
}
|
||||
printf ( "轮到用户%c \n" , user );
|
||||
printf ( "请输入横坐标:" );
|
||||
while ( scanf ( "%d" , & x ) != 1 )
|
||||
{
|
||||
while ( getchar ( ) != '\n' );
|
||||
printf ( "请输入合法数组:" );
|
||||
}
|
||||
printf ( "请输入纵坐标:" );
|
||||
while ( scanf ( "%d" , & y ) != 1 )
|
||||
{
|
||||
while ( getchar ( ) != '\n' );
|
||||
printf ( "请输入合法数字:" );
|
||||
}
|
||||
credited ( x , y , array_chessboard , user );//存入用户输入的数字
|
||||
if ( judgment ( user , array_chessboard ) == user )//判断用户是否胜利
|
||||
{
|
||||
printf ( "用户%c胜利\n" , user );
|
||||
break;
|
||||
}
|
||||
}
|
||||
|
||||
if ( bout == 400 )//平局判断
|
||||
{
|
||||
printf ( "平局\n" );
|
||||
}
|
||||
print_chessboard ( array_chessboard ); //输出棋盘
|
||||
while ( getchar ( ) != '\n' );//清除缓存
|
||||
home ( );//返回主页
|
||||
}
|
||||
|
||||
//单人模式
|
||||
void single_game ()
|
||||
{
|
||||
//初始化
|
||||
char user;//判断是那个用户
|
||||
int bout = 0;//用户输入的回合
|
||||
int x;//横坐标
|
||||
int y;//纵坐标
|
||||
char array_chessboard[20][20];//初始化棋盘
|
||||
initialization ( array_chessboard );//初始化数组里面的数
|
||||
while ( bout < 200 )
|
||||
{
|
||||
bout ++;
|
||||
printf ( "第%d回合\n" , bout );
|
||||
user = 'X';
|
||||
printf ( "轮到用户 \n" );
|
||||
printf ( "请输入横坐标:" );
|
||||
while ( scanf ( "%d" , & x ) != 1 )
|
||||
{
|
||||
while ( getchar ( ) != '\n' );
|
||||
printf ( "请输入合法数组:" );
|
||||
}
|
||||
printf ( "请输入纵坐标:" );
|
||||
while ( scanf ( "%d" , & y ) != 1 )
|
||||
{
|
||||
while ( getchar ( ) != '\n' );
|
||||
printf ( "请输入合法数字:" );
|
||||
}
|
||||
credited ( x , y , array_chessboard , user );//存入用户输入的数字
|
||||
if ( judgment ( user , array_chessboard ) == user )//判断用户是否胜利
|
||||
{
|
||||
printf ( "用户胜利\n" );
|
||||
break;
|
||||
}
|
||||
|
||||
printf ( "轮到AI \n" );
|
||||
AI_chess ( & x , & y , user , array_chessboard );//获取ai判断输出的数
|
||||
|
||||
user = 'Y';
|
||||
credited ( x , y , array_chessboard , user );//存入AI输入的数字
|
||||
if ( judgment ( user , array_chessboard ) == user )//判断用户是否胜利
|
||||
{
|
||||
printf ( "AI胜利\n" );
|
||||
break;
|
||||
}
|
||||
print_chessboard ( array_chessboard );//输出当前地图
|
||||
|
||||
}
|
||||
|
||||
if ( bout == 200 )//平局判断
|
||||
{
|
||||
printf ( "平局\n" );
|
||||
}
|
||||
print_chessboard ( array_chessboard ); //输出棋盘
|
||||
while ( getchar ( ) != '\n' );//清除缓存
|
||||
home ( );
|
||||
}
|
||||
|
||||
//菜单
|
||||
void home ()
|
||||
{
|
||||
int pick;//判断进入什么模式
|
||||
printf ( "————主页————\n" );
|
||||
printf ( "0.退出程序\n" );
|
||||
printf ( "1.单人模式\n" );
|
||||
printf ( "2.双人模式\n" );
|
||||
printf ( "请输入:" );
|
||||
while ( scanf ( "%d" , & pick ) != 1 )
|
||||
{
|
||||
while ( getchar ( ) != '\n' );//清除缓存
|
||||
printf ( "请输入合法数字:" );
|
||||
}
|
||||
switch ( pick )
|
||||
{
|
||||
case 0:
|
||||
{
|
||||
printf ( "欢迎下次使用" );
|
||||
return;
|
||||
break;
|
||||
}
|
||||
case 1:
|
||||
{
|
||||
while ( getchar ( ) != '\n' );//清除缓存
|
||||
single_game ( );
|
||||
break;
|
||||
}
|
||||
case 2:
|
||||
{
|
||||
while ( getchar ( ) != '\n' );//清除缓存
|
||||
double_game ( );
|
||||
break;
|
||||
}
|
||||
default:
|
||||
{
|
||||
while ( getchar ( ) != '\n' );//清除缓存
|
||||
printf ( "输入错误 \n" );
|
||||
home ( );
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
int main ()
|
||||
{
|
||||
srand ( time ( NULL ) );// 设置种子,可以让每次运行程序时得到不同的随机数序列
|
||||
home ( );
|
||||
return 0;
|
||||
}
|
@ -1,782 +0,0 @@
|
||||
#include <stdio.h>
|
||||
#include <stdlib.h>
|
||||
#include <time.h>
|
||||
|
||||
//声明
|
||||
void home ();
|
||||
|
||||
//初始化棋盘
|
||||
char initialization ( int array , char array_chessboard[array][array] )
|
||||
{
|
||||
for ( int i = 0 ; i < array ; i ++ )
|
||||
{
|
||||
for ( int j = 0 ; j < array ; j ++ ) //填充棋盘横排
|
||||
{
|
||||
array_chessboard[ i ][ j ] = '.';
|
||||
}
|
||||
}
|
||||
return array_chessboard[ array ][ array ];
|
||||
}
|
||||
|
||||
//输出当前棋盘
|
||||
void print_chessboard ( int array , char array_chessboard[array][array] )
|
||||
{
|
||||
printf ( " " );
|
||||
for ( int i = 0 ; i < array ; i ++ )
|
||||
{
|
||||
if ( i < 10 ) //输出第几行
|
||||
{
|
||||
printf ( " %d " , i );
|
||||
} else
|
||||
{
|
||||
printf ( "%d " , i );
|
||||
}
|
||||
}
|
||||
printf ( "\n" );
|
||||
for ( int i = 0 ; i < array ; i ++ )//输出棋盘竖列
|
||||
{
|
||||
if ( i < 10 ) //输出第几行
|
||||
{
|
||||
printf ( " %d" , i );
|
||||
} else
|
||||
{
|
||||
printf ( "%d" , i );
|
||||
}
|
||||
for ( int j = 0 ; j < array ; j ++ ) //输出棋盘横排
|
||||
{
|
||||
printf ( " %c" , array_chessboard[ i ][ j ] );
|
||||
}
|
||||
if ( i < 10 ) //输出第几行
|
||||
{
|
||||
printf ( " %d" , i );
|
||||
} else
|
||||
{
|
||||
printf ( " %d" , i );
|
||||
}
|
||||
printf ( "\n" );//输出完每一排换行
|
||||
}
|
||||
printf ( " " );
|
||||
for ( int i = 0 ; i < array ; i ++ )
|
||||
{
|
||||
if ( i < 10 ) //输出第几行
|
||||
{
|
||||
printf ( " %d " , i );
|
||||
} else
|
||||
{
|
||||
printf ( "%d " , i );
|
||||
}
|
||||
}
|
||||
printf ( "\n" );
|
||||
}
|
||||
|
||||
//存入用户坐标
|
||||
char credited ( int array , int x , int y , char array_chessboard[array][array] , char user )
|
||||
{
|
||||
while ( x < 0 || x >= array || y < 0 || y >= array ) //检查坐标是否在棋盘内
|
||||
{
|
||||
while ( getchar ( ) != '\n' );
|
||||
printf ( "非法坐标,请重新输入\n" );
|
||||
printf ( "请输入横坐标:" );
|
||||
while ( scanf ( "%d" , & x ) != 1 )
|
||||
{
|
||||
while ( getchar ( ) != '\n' );
|
||||
printf ( "请输入合法数字:" );
|
||||
}
|
||||
printf ( "请输入竖坐标:" );
|
||||
while ( scanf ( "%d" , & y ) != 1 )
|
||||
{
|
||||
while ( getchar ( ) != '\n' );
|
||||
printf ( "请输入合法数字:" );
|
||||
}
|
||||
}
|
||||
while ( array_chessboard[ x ][ y ] != '.' ) //检查坐标是否存在棋子
|
||||
{
|
||||
while ( getchar ( ) != '\n' );
|
||||
printf ( "该坐标已存在棋子,请重新输入\n" );
|
||||
printf ( "请输入横坐标:" );
|
||||
while ( scanf ( "%d" , & x ) != 1 )
|
||||
{
|
||||
while ( getchar ( ) != '\n' );
|
||||
printf ( "请输入合法数字:" );
|
||||
}
|
||||
printf ( "请输入竖坐标:" );
|
||||
while ( scanf ( "%d" , & y ) != 1 )
|
||||
{
|
||||
while ( getchar ( ) != '\n' );
|
||||
printf ( "请输入合法数字:" );
|
||||
}
|
||||
}
|
||||
if ( user == 'X' )
|
||||
{
|
||||
array_chessboard[ x ][ y ] = 'X';
|
||||
}
|
||||
if ( user == 'Y' )
|
||||
{
|
||||
array_chessboard[ x ][ y ] = 'Y';
|
||||
}
|
||||
return array_chessboard[ x ][ y ];//返回当前地图
|
||||
}
|
||||
|
||||
//判断是否胜利
|
||||
char judgment ( int array , char user , char array_chessboard[array][array] )
|
||||
{
|
||||
int i;//初始化横排
|
||||
int j;//初始化竖排
|
||||
|
||||
//判断横向
|
||||
for ( i = 0 ; i < array ; i ++ )
|
||||
{
|
||||
for ( j = 0 ; j < array ; j ++ )
|
||||
{
|
||||
if ( array_chessboard[ i ][ j ] == user &&
|
||||
array_chessboard[ i ][ j + 1 ] == user &&
|
||||
array_chessboard[ i ][ j + 2 ] == user &&
|
||||
array_chessboard[ i ][ j + 3 ] == user &&
|
||||
array_chessboard[ i ][ j + 4 ] == user
|
||||
)
|
||||
{
|
||||
return user;
|
||||
}
|
||||
}
|
||||
}
|
||||
//判断纵向
|
||||
for ( i = 0 ; i < array ; i ++ )
|
||||
{
|
||||
for ( j = 0 ; j < array ; j ++ )
|
||||
{
|
||||
if ( array_chessboard[ i ][ j ] == user &&
|
||||
array_chessboard[ i + 1 ][ j ] == user &&
|
||||
array_chessboard[ i + 2 ][ j ] == user &&
|
||||
array_chessboard[ i + 3 ][ j ] == user &&
|
||||
array_chessboard[ i + 4 ][ j ] == user
|
||||
)
|
||||
{
|
||||
return array_chessboard[ i ][ j ];
|
||||
}
|
||||
}
|
||||
}
|
||||
//判断左往右边斜
|
||||
for ( i = 0 ; i < array ; i ++ )
|
||||
{
|
||||
for ( j = 0 ; j < array ; j ++ )
|
||||
{
|
||||
if ( array_chessboard[ i ][ j ] == user &&
|
||||
array_chessboard[ i + 1 ][ j + 1 ] == user &&
|
||||
array_chessboard[ i + 2 ][ j + 2 ] == user &&
|
||||
array_chessboard[ i + 3 ][ j + 3 ] == user &&
|
||||
array_chessboard[ i + 4 ][ j + 4 ] == user
|
||||
)
|
||||
{
|
||||
return user;
|
||||
}
|
||||
}
|
||||
}
|
||||
//判断右往左边斜
|
||||
for ( i = 0 ; i < array ; i ++ )
|
||||
{
|
||||
for ( j = 0 ; j < array ; j ++ )
|
||||
{
|
||||
if ( array_chessboard[ i ][ j ] == user &&
|
||||
array_chessboard[ i + 1 ][ j - 1 ] == user &&
|
||||
array_chessboard[ i + 2 ][ j - 2 ] == user &&
|
||||
array_chessboard[ i + 3 ][ j - 3 ] == user &&
|
||||
array_chessboard[ i + 4 ][ j - 4 ] == user
|
||||
)
|
||||
{
|
||||
return user;
|
||||
}
|
||||
}
|
||||
}
|
||||
return '\0';
|
||||
}//
|
||||
|
||||
//生成随机数
|
||||
void generateRandomPosition ( int array , int * x , int * y , char array_chessboard[array][array] )
|
||||
{
|
||||
* x = rand ( ) % array;
|
||||
* y = rand ( ) % array;
|
||||
int randomNumber = rand ( ) % 8;
|
||||
switch ( randomNumber )
|
||||
{
|
||||
case 0:
|
||||
{
|
||||
* y += 1;
|
||||
break;
|
||||
}
|
||||
case 1:
|
||||
{
|
||||
* x += 1;
|
||||
break;
|
||||
}
|
||||
case 2:
|
||||
{
|
||||
* x += 1;
|
||||
* y += 1;
|
||||
break;
|
||||
}
|
||||
case 3:
|
||||
{
|
||||
* x -= 1;
|
||||
break;
|
||||
}
|
||||
case 4:
|
||||
{
|
||||
* y -= 1;
|
||||
break;
|
||||
}
|
||||
case 5:
|
||||
{
|
||||
* x -= 1;
|
||||
* y -= 1;
|
||||
break;
|
||||
}
|
||||
case 6:
|
||||
{
|
||||
* x -= 1;
|
||||
* y += 1;
|
||||
break;
|
||||
}
|
||||
case 7:
|
||||
{
|
||||
* x += 1;
|
||||
* y -= 1;
|
||||
break;
|
||||
}
|
||||
}
|
||||
while ( * x < 0 || * x >= array || * y < 0 || * y >= array || array_chessboard[ * x ][ * y ] != '.' )
|
||||
{
|
||||
* x = rand ( ) % array;
|
||||
* y = rand ( ) % array;
|
||||
generateRandomPosition ( array , x , y , array_chessboard );
|
||||
}
|
||||
}
|
||||
|
||||
//判断ai下棋位置
|
||||
void AI_chess ( int array , int * x , int * y , char user , char array_chessboard[array][array] )
|
||||
{
|
||||
int i;//初始化横排
|
||||
int j;//初始化竖排
|
||||
|
||||
//如果横向有四个一样
|
||||
for ( i = 0 ; i < array ; i ++ )
|
||||
{
|
||||
for ( j = 0 ; j < array ; j ++ )
|
||||
{
|
||||
if ( array_chessboard[ i ][ j ] == user &&
|
||||
array_chessboard[ i ][ j + 1 ] == user &&
|
||||
array_chessboard[ i ][ j + 2 ] == user &&
|
||||
array_chessboard[ i ][ j + 3 ] == user
|
||||
) //此if为了判断是否三个一样
|
||||
{
|
||||
if ( array_chessboard[ i ][ j - 1 ] == '.' )
|
||||
{
|
||||
* x = i;
|
||||
* y = j - 1;
|
||||
} else if ( array_chessboard[ i ][ j + 4 ] == '.' )
|
||||
{
|
||||
* x = i;
|
||||
* y = j + 4;
|
||||
} else if ( * x < 0 || * x >= array || * y < 0 || * y >= array ||
|
||||
array_chessboard[ * x ][ * y ] != '.' )
|
||||
{
|
||||
continue;
|
||||
}
|
||||
return;
|
||||
}
|
||||
|
||||
}
|
||||
}
|
||||
//判断纵向有四个一样
|
||||
for ( i = 0 ; i < array ; i ++ )
|
||||
{
|
||||
for ( j = 0 ; j < array ; j ++ )
|
||||
{
|
||||
if ( array_chessboard[ i ][ j ] == user &&
|
||||
array_chessboard[ i + 1 ][ j ] == user &&
|
||||
array_chessboard[ i + 2 ][ j ] == user &&
|
||||
array_chessboard[ i + 3 ][ j ] == user
|
||||
|
||||
)
|
||||
{
|
||||
if ( array_chessboard[ i - 1 ][ j ] == '.' )
|
||||
{
|
||||
* x = i - 1;
|
||||
* y = j;
|
||||
} else if ( array_chessboard[ i + 4 ][ j ] == '.' )
|
||||
{
|
||||
* x = i + 4;
|
||||
* y = j;
|
||||
} else if ( * x < 0 || * x >= array || * y < 0 || * y >= array ||
|
||||
array_chessboard[ * x ][ * y ] != '.' )
|
||||
{
|
||||
continue;
|
||||
}
|
||||
return;
|
||||
}
|
||||
|
||||
}
|
||||
}
|
||||
//判断左往右边斜有四个一样
|
||||
for ( i = 0 ; i < array ; i ++ )
|
||||
{
|
||||
for ( j = 0 ; j < array ; j ++ )
|
||||
{
|
||||
if ( array_chessboard[ i ][ j ] == user &&
|
||||
array_chessboard[ i + 1 ][ j + 1 ] == user &&
|
||||
array_chessboard[ i + 2 ][ j + 2 ] == user &&
|
||||
array_chessboard[ i + 3 ][ j + 3 ] == user
|
||||
)
|
||||
{
|
||||
if ( array_chessboard[ i - 1 ][ j - 1 ] == '.' )
|
||||
{
|
||||
* x = i - 1;
|
||||
* y = j - 1;
|
||||
} else if ( array_chessboard[ i + 4 ][ j + 4 ] == '.' )
|
||||
{
|
||||
* x = i + 4;
|
||||
* y = j + 4;
|
||||
} else if ( * x < 0 || * x >= array || * y < 0 || * y >= array ||
|
||||
array_chessboard[ * x ][ * y ] != '.' )
|
||||
{
|
||||
continue;
|
||||
}
|
||||
return;
|
||||
}
|
||||
|
||||
}
|
||||
}
|
||||
//判断右往左边斜四个一样
|
||||
for ( i = 0 ; i < array ; i ++ )
|
||||
{
|
||||
for ( j = 0 ; j < array ; j ++ )
|
||||
{
|
||||
if ( array_chessboard[ i ][ j ] == user &&
|
||||
array_chessboard[ i + 1 ][ j - 1 ] == user &&
|
||||
array_chessboard[ i + 2 ][ j - 2 ] == user &&
|
||||
array_chessboard[ i + 3 ][ j - 3 ] == user
|
||||
)
|
||||
{
|
||||
if ( array_chessboard[ i - 1 ][ j + 1 ] == '.' )
|
||||
{
|
||||
* x = i - 1;
|
||||
* y = j + 1;
|
||||
} else if ( array_chessboard[ i + 4 ][ j - 4 ] == '.' )
|
||||
{
|
||||
* x = i + 4;
|
||||
* y = j - 4;
|
||||
} else if ( * x < 0 || * x >= array || * y < 0 || * y >= array ||
|
||||
array_chessboard[ * x ][ * y ] != '.' )
|
||||
{
|
||||
continue;
|
||||
}
|
||||
return;
|
||||
}
|
||||
|
||||
}
|
||||
}
|
||||
|
||||
//如果横向有三个一样
|
||||
for ( i = 0 ; i < array ; i ++ )
|
||||
{
|
||||
for ( j = 0 ; j < array ; j ++ )
|
||||
{
|
||||
if ( array_chessboard[ i ][ j ] == user &&
|
||||
array_chessboard[ i ][ j + 1 ] == user &&
|
||||
array_chessboard[ i ][ j + 2 ] == user
|
||||
) //此if为了判断是否三个一样
|
||||
{
|
||||
|
||||
if ( array_chessboard[ i ][ j - 1 ] == '.' )
|
||||
{
|
||||
* x = i;
|
||||
* y = j - 1;
|
||||
} else if ( array_chessboard[ i ][ j + 3 ] == '.' )
|
||||
{
|
||||
* x = i;
|
||||
* y = j + 3;
|
||||
} else if ( * x < 0 || * x >= array || * y < 0 || * y >= array ||
|
||||
array_chessboard[ * x ][ * y ] != '.' )
|
||||
{
|
||||
continue;
|
||||
}
|
||||
return;
|
||||
}
|
||||
|
||||
}
|
||||
}
|
||||
//判断纵向有三个一样
|
||||
for ( i = 0 ; i < array ; i ++ )
|
||||
{
|
||||
for ( j = 0 ; j < array ; j ++ )
|
||||
{
|
||||
if ( array_chessboard[ i ][ j ] == user &&
|
||||
array_chessboard[ i + 1 ][ j ] == user &&
|
||||
array_chessboard[ i + 2 ][ j ] == user
|
||||
|
||||
)
|
||||
{
|
||||
if ( array_chessboard[ i - 1 ][ j ] == '.' )
|
||||
{
|
||||
* x = i - 1;
|
||||
* y = j;
|
||||
} else if ( array_chessboard[ i + 3 ][ j ] == '.' )
|
||||
{
|
||||
* x = i + 3;
|
||||
* y = j;
|
||||
} else if ( * x < 0 || * x >= array || * y < 0 || * y >= array ||
|
||||
array_chessboard[ * x ][ * y ] != '.' )
|
||||
{
|
||||
continue;
|
||||
}
|
||||
return;
|
||||
}
|
||||
|
||||
}
|
||||
}
|
||||
//判断左往右边斜有三个一样
|
||||
for ( i = 0 ; i < array ; i ++ )
|
||||
{
|
||||
for ( j = 0 ; j < array ; j ++ )
|
||||
{
|
||||
if ( array_chessboard[ i ][ j ] == user &&
|
||||
array_chessboard[ i + 1 ][ j + 1 ] == user &&
|
||||
array_chessboard[ i + 2 ][ j + 2 ] == user
|
||||
)
|
||||
{
|
||||
if ( array_chessboard[ i - 1 ][ j - 1 ] == '.' )
|
||||
{
|
||||
* x = i - 1;
|
||||
* y = j - 1;
|
||||
} else if ( array_chessboard[ i + 3 ][ j + 3 ] == '.' )
|
||||
{
|
||||
* x = i + 3;
|
||||
* y = j + 3;
|
||||
} else if ( * x < 0 || * x >= array || * y < 0 || * y >= array ||
|
||||
array_chessboard[ * x ][ * y ] != '.' )
|
||||
{
|
||||
continue;
|
||||
}
|
||||
return;
|
||||
}
|
||||
|
||||
}
|
||||
}
|
||||
//判断右往左边斜三个一样
|
||||
for ( i = 0 ; i < array ; i ++ )
|
||||
{
|
||||
for ( j = 0 ; j < array ; j ++ )
|
||||
{
|
||||
if ( array_chessboard[ i ][ j ] == user &&
|
||||
array_chessboard[ i + 1 ][ j - 1 ] == user &&
|
||||
array_chessboard[ i + 2 ][ j - 2 ] == user
|
||||
)
|
||||
{
|
||||
if ( array_chessboard[ i - 1 ][ j + 1 ] == '.' )
|
||||
{
|
||||
* x = i - 1;
|
||||
* y = j + 1;
|
||||
} else if ( array_chessboard[ i + 3 ][ j - 3 ] == '.' )
|
||||
{
|
||||
* x = i + 3;
|
||||
* y = j - 3;
|
||||
} else if ( * x < 0 || * x >= array || * y < 0 || * y >= array ||
|
||||
array_chessboard[ * x ][ * y ] != '.' )
|
||||
{
|
||||
continue;
|
||||
}
|
||||
return;
|
||||
}
|
||||
|
||||
}
|
||||
}
|
||||
|
||||
//如果横向有两个一样
|
||||
for ( i = 0 ; i < array ; i ++ )
|
||||
{
|
||||
for ( j = 0 ; j < array ; j ++ )
|
||||
{
|
||||
if ( array_chessboard[ i ][ j ] == user &&
|
||||
array_chessboard[ i ][ j + 1 ] == user
|
||||
)
|
||||
{
|
||||
if ( array_chessboard[ i ][ j - 1 ] == '.' )
|
||||
{
|
||||
* x = i;
|
||||
* y = j - 1;
|
||||
} else if ( array_chessboard[ i ][ j + 2 ] == '.' )
|
||||
{
|
||||
* x = i;
|
||||
* y = j + 2;
|
||||
} else if ( * x < 0 || * x >= array || * y < 0 || * y >= array ||
|
||||
array_chessboard[ * x ][ * y ] != '.' )
|
||||
{
|
||||
continue;
|
||||
}
|
||||
return;
|
||||
}
|
||||
|
||||
}
|
||||
}
|
||||
//判断纵向有两个一样
|
||||
for ( i = 0 ; i < array ; i ++ )
|
||||
{
|
||||
for ( j = 0 ; j < array ; j ++ )
|
||||
{
|
||||
if ( array_chessboard[ i + 2 ][ j ] == '.' && array_chessboard[ i - 1 ][ j ] == '.' )
|
||||
{
|
||||
if ( array_chessboard[ i ][ j ] == user &&
|
||||
array_chessboard[ i + 1 ][ j ] == user
|
||||
)
|
||||
{
|
||||
if ( array_chessboard[ i + 2 ][ j ] == '.' )
|
||||
{
|
||||
* x = i + 2;
|
||||
* y = j;
|
||||
} else if ( array_chessboard[ i - 1 ][ j ] == '.' )
|
||||
{
|
||||
* x = i - 1;
|
||||
* y = j;
|
||||
} else if ( * x < 0 || * x >= array || * y < 0 || * y >= array ||
|
||||
array_chessboard[ * x ][ * y ] != '.' )
|
||||
{
|
||||
continue;
|
||||
}
|
||||
return;
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
//判断左往右边斜有两个一样
|
||||
for ( i = 0 ; i < array ; i ++ )
|
||||
{
|
||||
for ( j = 0 ; j < array ; j ++ )
|
||||
{
|
||||
if ( array_chessboard[ i ][ j ] == user &&
|
||||
array_chessboard[ i + 1 ][ j + 1 ] == user
|
||||
)
|
||||
{
|
||||
if ( array_chessboard[ i - 1 ][ j - 1 ] == '.' )
|
||||
{
|
||||
* x = i - 1;
|
||||
* y = j - 1;
|
||||
} else if ( array_chessboard[ i + 2 ][ j + 2 ] == '.' )
|
||||
{
|
||||
* x = i + 2;
|
||||
* y = j + 2;
|
||||
} else if ( * x < 0 || * x >= array || * y < 0 || * y >= array ||
|
||||
array_chessboard[ * x ][ * y ] != '.' )
|
||||
{
|
||||
continue;
|
||||
}
|
||||
return;
|
||||
}
|
||||
|
||||
|
||||
}
|
||||
}
|
||||
//判断右往左边斜两个一样
|
||||
for ( i = 0 ; i < array ; i ++ )
|
||||
{
|
||||
for ( j = 0 ; j < array ; j ++ )
|
||||
{
|
||||
if ( array_chessboard[ i ][ j ] == user &&
|
||||
array_chessboard[ i + 1 ][ j - 1 ] == user
|
||||
)
|
||||
{
|
||||
if ( array_chessboard[ i + 2 ][ j - 2 ] == '.' )
|
||||
{
|
||||
* x = i + 2;
|
||||
* y = j - 2;
|
||||
} else if ( array_chessboard[ i - 1 ][ j + 1 ] == '.' )
|
||||
{
|
||||
* x = i - 1;
|
||||
* y = j + 1;
|
||||
} else if ( * x < 0 || * x >= array || * y < 0 || * y >= array ||
|
||||
array_chessboard[ * x ][ * y ] != '.' )
|
||||
{
|
||||
continue;
|
||||
}
|
||||
return;
|
||||
}
|
||||
|
||||
}
|
||||
}
|
||||
//如果不满足随机输入
|
||||
generateRandomPosition ( array , x , y , array_chessboard );
|
||||
|
||||
|
||||
}
|
||||
|
||||
//双人模式
|
||||
void double_game ()
|
||||
{
|
||||
//初始化
|
||||
char user;//判断是那个用户
|
||||
int bout = 0;//用户输入的回合
|
||||
int x;//用户横坐标
|
||||
int y;//用户纵坐标
|
||||
int array;//棋盘长度
|
||||
printf ( "请输入棋盘长度(0开始计算,8<=chess<=25)" );
|
||||
while ( scanf ( "%d" , & array ) != 1 || array < 8 || array > 25 )
|
||||
{
|
||||
while ( getchar ( ) != '\n' );//清除缓存
|
||||
printf ( "请重新输入棋盘长度" );
|
||||
}
|
||||
char array_chessboard[array][array];//初始化棋盘
|
||||
initialization ( array , array_chessboard );//初始化数组里面的数
|
||||
while ( bout < array * array )
|
||||
{
|
||||
print_chessboard ( array , array_chessboard );//输出当前地图
|
||||
bout ++;
|
||||
printf ( "第%d回合\n" , ( bout + 1 ) / 2 );
|
||||
if ( bout % 2 == 1 )
|
||||
{
|
||||
user = 'X';
|
||||
} else
|
||||
{
|
||||
user = 'Y';
|
||||
}
|
||||
printf ( "轮到用户%c \n" , user );
|
||||
printf ( "请输入横坐标:" );
|
||||
while ( scanf ( "%d" , & x ) != 1 )
|
||||
{
|
||||
while ( getchar ( ) != '\n' );
|
||||
printf ( "请输入合法数组:" );
|
||||
}
|
||||
printf ( "请输入纵坐标:" );
|
||||
while ( scanf ( "%d" , & y ) != 1 )
|
||||
{
|
||||
while ( getchar ( ) != '\n' );
|
||||
printf ( "请输入合法数字:" );
|
||||
}
|
||||
credited ( array , x , y , array_chessboard , user );//存入用户输入的数字
|
||||
if ( judgment ( array , user , array_chessboard ) == user )//判断用户是否胜利
|
||||
{
|
||||
printf ( "用户%c胜利\n" , user );
|
||||
break;
|
||||
}
|
||||
}
|
||||
|
||||
if ( bout == array * array )//平局判断
|
||||
{
|
||||
printf ( "平局\n" );
|
||||
}
|
||||
print_chessboard ( array , array_chessboard ); //输出棋盘
|
||||
while ( getchar ( ) != '\n' );//清除缓存
|
||||
home ( );//返回主页
|
||||
}
|
||||
|
||||
//单人模式
|
||||
void single_game ()
|
||||
{
|
||||
//初始化
|
||||
char user;//判断是那个用户
|
||||
int bout = 0;//用户输入的回合
|
||||
int x;//横坐标
|
||||
int y;//纵坐标
|
||||
int array;//棋盘长度
|
||||
printf ( "请输入棋盘长度(0开始计算,8<=chess<=25)" );
|
||||
while ( scanf ( "%d" , & array ) != 1 || array < 8 || array > 25 )
|
||||
{
|
||||
while ( getchar ( ) != '\n' );//清除缓存
|
||||
printf ( "请重新输入棋盘长度" );
|
||||
}
|
||||
char array_chessboard[array][array];//初始化棋盘
|
||||
initialization ( array , array_chessboard );//初始化数组里面的数
|
||||
while ( bout < array * array / 2 )
|
||||
{
|
||||
bout ++;
|
||||
printf ( "第%d回合\n" , bout );
|
||||
user = 'X';
|
||||
printf ( "轮到用户 \n" );
|
||||
printf ( "请输入横坐标:" );
|
||||
while ( scanf ( "%d" , & x ) != 1 )
|
||||
{
|
||||
while ( getchar ( ) != '\n' );
|
||||
printf ( "请输入合法数字:" );
|
||||
}
|
||||
printf ( "请输入纵坐标:" );
|
||||
while ( scanf ( "%d" , & y ) != 1 )
|
||||
{
|
||||
while ( getchar ( ) != '\n' );
|
||||
printf ( "请输入合法数字:" );
|
||||
}
|
||||
credited ( array , x , y , array_chessboard , user );//存入用户输入的数字
|
||||
if ( judgment ( array , user , array_chessboard ) == user )//判断用户是否胜利
|
||||
{
|
||||
printf ( "用户胜利\n" );
|
||||
break;
|
||||
}
|
||||
|
||||
printf ( "轮到电脑 \n" );
|
||||
AI_chess ( array , & x , & y , user , array_chessboard );//获取ai判断输出的数
|
||||
|
||||
user = 'Y';
|
||||
credited ( array , x , y , array_chessboard , user );//存入AI输入的数字
|
||||
if ( judgment ( array , user , array_chessboard ) == user )//判断用户是否胜利
|
||||
{
|
||||
printf ( "AI胜利\n" );
|
||||
break;
|
||||
}
|
||||
print_chessboard ( array , array_chessboard );//输出当前地图
|
||||
|
||||
}
|
||||
|
||||
if ( bout == array * array / 2 )//平局判断
|
||||
{
|
||||
printf ( "平局\n" );
|
||||
}
|
||||
print_chessboard ( array , array_chessboard ); //输出棋盘
|
||||
while ( getchar ( ) != '\n' );//清除缓存
|
||||
home ( );
|
||||
}
|
||||
|
||||
//菜单
|
||||
void home ()
|
||||
{
|
||||
int pick;//判断进入什么模式
|
||||
printf ( "————主页————\n" );
|
||||
printf ( "0.退出程序\n" );
|
||||
printf ( "1.单人模式\n" );
|
||||
printf ( "2.双人模式\n" );
|
||||
printf ( "请输入:" );
|
||||
while ( scanf ( "%d" , & pick ) != 1 )
|
||||
{
|
||||
while ( getchar ( ) != '\n' );//清除缓存
|
||||
printf ( "请输入合法数字:" );
|
||||
}
|
||||
switch ( pick )
|
||||
{
|
||||
case 0:
|
||||
{
|
||||
printf ( "欢迎下次使用" );
|
||||
return;
|
||||
break;
|
||||
}
|
||||
case 1:
|
||||
{
|
||||
while ( getchar ( ) != '\n' );//清除缓存
|
||||
single_game ( );
|
||||
break;
|
||||
}
|
||||
case 2:
|
||||
{
|
||||
while ( getchar ( ) != '\n' );//清除缓存
|
||||
double_game ( );
|
||||
break;
|
||||
}
|
||||
default:
|
||||
{
|
||||
while ( getchar ( ) != '\n' );//清除缓存
|
||||
printf ( "输入错误 \n" );
|
||||
home ( );
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
int main ()
|
||||
{
|
||||
srand ( time ( NULL ) );// 设置种子,可以让每次运行程序时得到不同的随机数序列
|
||||
home ( );
|
||||
return 0;
|
||||
}
|
File diff suppressed because it is too large
Load Diff
File diff suppressed because it is too large
Load Diff
@ -1,153 +0,0 @@
|
||||
#include<stdio.h>
|
||||
#include<stdlib.h>
|
||||
|
||||
int main ()
|
||||
{
|
||||
double a , b , c , e , f , g , h; ///本金,年利率.年份,利息,本利,取钱,case里面的变量,i
|
||||
int d; //获取用户需要进入的模式
|
||||
|
||||
//开始界面
|
||||
printf ( "简易atm机 \n" );
|
||||
printf ( "--------------------- \n" ); //用于分割
|
||||
//本金
|
||||
printf ( "请输入你的本金:" );
|
||||
while ( scanf ( "%lf" , & a ) != 1 ) //判断是否为合法数字
|
||||
{
|
||||
printf ( "请输入合法的数字:" );
|
||||
while ( getchar ( ) != '\n' );
|
||||
}
|
||||
|
||||
//年利率
|
||||
printf ( "请输入你的年利率(不用输入%%):" );
|
||||
while ( scanf ( "%lf" , & b ) != 1 || b <= 0 ) //判断是否为合法数字
|
||||
{
|
||||
printf ( "请输入合法的年利率:" );
|
||||
while ( getchar ( ) != '\n' );
|
||||
}
|
||||
|
||||
|
||||
//年份
|
||||
printf ( "请输入你的年份:" );
|
||||
while ( scanf ( "%lf" , & c ) != 1 || c <= 0 ) //判断是否为合法数字
|
||||
{
|
||||
printf ( "请输入合理的年份:" );
|
||||
while ( getchar ( ) != '\n' );
|
||||
}
|
||||
|
||||
system ( "cls" ); // windows清屏命令,如果其他系统报错删除此行或注释掉
|
||||
//system("clear"); //Linux和macOS清屏命令
|
||||
|
||||
while ( 1 )
|
||||
{
|
||||
e = a * b * c / 100; //利息
|
||||
f = a + e; //本利
|
||||
printf ( "存入本金为%.3lf \n" , a );
|
||||
printf ( "当前利率为%.3lf%% \n" , b );
|
||||
printf ( "当前存了%.0lf年 \n" , c );
|
||||
printf ( "获得的利息为%.3lf \n" , e );
|
||||
printf ( "余额为%.3lf \n" , f );
|
||||
|
||||
printf ( "--------------------- \n" ); //用于分割
|
||||
|
||||
printf ( "请输入对应的数字进入对应的模式 \n" );
|
||||
printf ( "0.退出 \n" );
|
||||
printf ( "1.存钱 \n" );
|
||||
printf ( "2.取钱 \n" );
|
||||
printf ( "3.增加年份 \n" );
|
||||
printf ( "4.减少年份 \n" );
|
||||
printf ( "5.增加年利率 \n" );
|
||||
printf ( "6.减少年利率 \n" );
|
||||
|
||||
printf ( "请输入对应的数字进入需要的模式:" );
|
||||
while ( scanf ( "%d" , & d ) < 0 || d > 4 ) //判断是否为合适数字
|
||||
{
|
||||
printf ( "请输入对应的数字:" );
|
||||
while ( getchar ( ) != '\n' );
|
||||
}
|
||||
|
||||
switch ( d )
|
||||
{
|
||||
case 0:
|
||||
{
|
||||
return 1;
|
||||
}
|
||||
case 1:
|
||||
{
|
||||
printf ( "请输入你需要存入多少钱:" );
|
||||
while ( scanf ( "%lf" , & h ) != 1 || h < 0 ) //判断是否为合法数字
|
||||
{
|
||||
printf ( "请输入合法的数字:" );
|
||||
while ( getchar ( ) != '\n' );
|
||||
}
|
||||
a += h;
|
||||
system ( "cls" ); // windows清屏命令
|
||||
break;
|
||||
}
|
||||
case 2:
|
||||
{
|
||||
printf ( "请输入你需要取出多少钱:" );
|
||||
while ( scanf ( "%lf" , & h ) != 1 || h < 0 || h > a ) //判断是否为合法数字
|
||||
{
|
||||
printf ( "请输入合法的数字:" );
|
||||
while ( getchar ( ) != '\n' );
|
||||
}
|
||||
a -= h;
|
||||
system ( "cls" ); // windows清屏命令
|
||||
break;
|
||||
}
|
||||
|
||||
case 3:
|
||||
{
|
||||
printf ( "请输入你需要增加多少年:" );
|
||||
while ( scanf ( "%lf" , & h ) != 1 || h < 0 ) //判断是否为合法数字
|
||||
{
|
||||
printf ( "请输入合法的数字:" );
|
||||
while ( getchar ( ) != '\n' );
|
||||
}
|
||||
c += h;
|
||||
system ( "cls" ); // windows清屏命令
|
||||
break;
|
||||
}
|
||||
case 4:
|
||||
{
|
||||
printf ( "请输入你需要减少多少年:" );
|
||||
while ( scanf ( "%lf" , & h ) != 1 || h < 0 || h > a ) //判断是否为合法数字
|
||||
{
|
||||
printf ( "请输入合法的数字:" );
|
||||
while ( getchar ( ) != '\n' );
|
||||
}
|
||||
c -= h;
|
||||
system ( "cls" ); // windows清屏命令
|
||||
break;
|
||||
}
|
||||
|
||||
case 5:
|
||||
{
|
||||
printf ( "请输入你需要增加多少年利率(不用输入%%):" );
|
||||
while ( scanf ( "%lf" , & h ) != 1 || h < 0 ) //判断是否为合法数字
|
||||
{
|
||||
printf ( "请输入合法的数字:" );
|
||||
while ( getchar ( ) != '\n' );
|
||||
}
|
||||
b += h;
|
||||
system ( "cls" ); // windows清屏命令
|
||||
break;
|
||||
}
|
||||
case 6:
|
||||
{
|
||||
printf ( "请输入你需要减少多少年利率(不用输入%%):" );
|
||||
while ( scanf ( "%lf" , & h ) != 1 || h < 0 || h > a ) //判断是否为合法数字
|
||||
{
|
||||
printf ( "请输入合法的数字:" );
|
||||
while ( getchar ( ) != '\n' );
|
||||
}
|
||||
b -= h;
|
||||
system ( "cls" ); // windows清屏命令
|
||||
break;
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
}
|
||||
return 0;
|
||||
}
|
@ -1,467 +0,0 @@
|
||||
#include<stdio.h>
|
||||
#include<stdlib.h>
|
||||
|
||||
int main ()
|
||||
{
|
||||
//初始化
|
||||
int account_1 , password_1 , password_2 = 0 , password_3 = 0 , account_2 = 0 , password_4 = 0; //账号;登录密码,取款密码,登录检查密码,检查登录账户,修改密码判断是不是6位
|
||||
char tab_1; //用户是否同意进入
|
||||
int tab_a = 0 , tab_b , tab_c , tab_d = 0 , tab_e , tab_f; //判断取款密码是否为6位数.判断取款密码是否为6位数,判断进入登录还是管理员,判断是否进入账户主页主页;账户主页选项;判断用户修改是否输入正确
|
||||
int administration_password , administration_a; //管理员密码,判断管理员选项
|
||||
double interest = 0 , capital = 10000 , money = 0 , interest_rate = 0.0175 , year = 0 , capital_1 = 0; //利息,本金,变动的钱,利率,年份,预测本金
|
||||
//注册账户
|
||||
printf ( "第一次使用需要注册账户 \n" );
|
||||
printf ( "不同意输入N,输入其他代表同意 \n:" );
|
||||
//获取用户是否同意进入
|
||||
tab_1 = getchar ( );
|
||||
|
||||
if ( tab_1 == 'n' || tab_1 == 'N' )
|
||||
{
|
||||
return 1;
|
||||
}
|
||||
|
||||
while ( getchar ( ) != '\n' ); //清楚缓存
|
||||
|
||||
//注册登录账户
|
||||
printf ( "账户名(只支持数字):" );
|
||||
while ( scanf ( "%d" , & account_1 ) != 1 )
|
||||
{
|
||||
while ( getchar ( ) != '\n' ); //清楚缓存
|
||||
printf ( "请输入合法的数字:" );
|
||||
continue;
|
||||
}
|
||||
|
||||
while ( getchar ( ) != '\n' ); //清楚缓存
|
||||
//注册登录密码
|
||||
printf ( "登录密码(只支持数字):" );
|
||||
while ( scanf ( "%d" , & password_1 ) != 1 )
|
||||
{
|
||||
while ( getchar ( ) != '\n' ); //清楚缓存
|
||||
printf ( "请输入合法的数字:" );
|
||||
continue;
|
||||
}
|
||||
while ( getchar ( ) != '\n' ); //清楚缓存
|
||||
//注册取款密码
|
||||
//注册取款密码
|
||||
printf ( "取款密码(只支持6位数字):" );
|
||||
while ( password_2 == 0 )
|
||||
{
|
||||
//判断是不是输入的数字
|
||||
while ( scanf ( "%d" , & password_2 ) != 1 )
|
||||
{
|
||||
while ( getchar ( ) != '\n' ); //清楚缓存
|
||||
printf ( "请输入合法的数字:" );
|
||||
continue;
|
||||
}
|
||||
tab_b = password_2;
|
||||
//判断是否为6位数
|
||||
|
||||
while ( tab_b != 0 )
|
||||
{
|
||||
tab_b /= 10;
|
||||
tab_a ++;
|
||||
}
|
||||
|
||||
if ( tab_a != 6 )
|
||||
{
|
||||
printf ( "当前输入%d位,密码是6位数 \n请重新输入:" , tab_a );
|
||||
password_2 = 0;
|
||||
tab_a = 0;
|
||||
continue;
|
||||
}
|
||||
if ( tab_a == 6 )
|
||||
{
|
||||
break;
|
||||
}
|
||||
}
|
||||
while ( getchar ( ) != '\n' ); //清楚缓存
|
||||
//提示用户输入成功
|
||||
printf ( "创建成功 \n" );
|
||||
printf ( "账户名:%d \n" , account_1 );
|
||||
printf ( "密码:%d \n" , password_1 );
|
||||
printf ( "密码:%d \n" , password_2 );
|
||||
printf ( "初始金额为%lf \n" , capital );
|
||||
|
||||
//此层循环为主页面开始
|
||||
while ( 1 )
|
||||
{
|
||||
printf ( "----银行主页----\n" );
|
||||
printf ( "0.退出程序 \n" );
|
||||
printf ( "1.登录银行账户 \n" );
|
||||
printf ( "请输入数字:" );
|
||||
scanf ( "%d" , & tab_c );
|
||||
printf ( "----银行主页----\n" );
|
||||
|
||||
while ( getchar ( ) != '\n' ); //清楚缓存
|
||||
//0退出
|
||||
if ( tab_c == 0 )
|
||||
{
|
||||
printf ( "欢迎下次使用" );
|
||||
return 1;
|
||||
}
|
||||
|
||||
//获取是否输入正确
|
||||
if ( tab_c != 0 && tab_c != 1 && tab_c != 2 )
|
||||
{
|
||||
printf ( "输入错误请重新输入 \n" );
|
||||
continue;
|
||||
}
|
||||
|
||||
//银行主页开始
|
||||
while ( tab_c == 1 )
|
||||
{
|
||||
printf ( "需要登陆账号 \n" );
|
||||
//获取用户账号
|
||||
printf ( "请输入账号:" );
|
||||
scanf ( "%d" , & account_2 );
|
||||
while ( account_1 != account_2 ) //判断账户是否正确
|
||||
{
|
||||
while ( getchar ( ) != '\n' ); //清楚缓存
|
||||
printf ( "请输入正确的账号:" );
|
||||
scanf ( "%d" , & account_2 );
|
||||
}
|
||||
//获取用密码
|
||||
printf ( "请输入密码:" );
|
||||
scanf ( "%d" , & password_3 );
|
||||
while ( password_1 != password_3 ) //判断密码是否正确
|
||||
{
|
||||
while ( getchar ( ) != '\n' ); //清楚缓存
|
||||
printf ( "请输入正确的密码:" );
|
||||
scanf ( "%d" , & password_3 );
|
||||
}
|
||||
// 正确的账号和密码
|
||||
printf ( "登录成功!\n" );
|
||||
tab_d = 1; //进入主页
|
||||
//此层输出账户主页
|
||||
while ( tab_d == 1 )
|
||||
{
|
||||
printf ( "----账户主页----\n" );
|
||||
printf ( "0.退出程序 \n" );
|
||||
printf ( "1.退出账户 \n" );
|
||||
printf ( "2.存钱 \n" );
|
||||
printf ( "3.取钱 \n" );
|
||||
printf ( "4.查看余额 \n" );
|
||||
printf ( "5.预测未来存款(当前利率为%.3lf) \n" , interest_rate );
|
||||
printf ( "6.修改账号 \n" );
|
||||
printf ( "7.修改密码 \n" );
|
||||
printf ( "8.修改取款密码 \n" );
|
||||
printf ( "请输入数字:" );
|
||||
scanf ( "%d" , & tab_e );
|
||||
printf ( "----账户主页----\n" );
|
||||
|
||||
while ( getchar ( ) != '\n' ); //清楚缓存
|
||||
|
||||
//重置判断
|
||||
tab_f = 0;
|
||||
tab_a = 0; //取款数字是否为6位
|
||||
//选择开始
|
||||
switch ( tab_e )
|
||||
{
|
||||
case 0:
|
||||
{
|
||||
printf ( "欢迎下次使用" );
|
||||
return 1;
|
||||
}
|
||||
|
||||
case 1:
|
||||
{
|
||||
tab_d = 0; //使不进入其他循环
|
||||
tab_c = 999; //使不进入其他循环
|
||||
printf ( "退出成功\n" );
|
||||
while ( getchar ( ) != '\n' ); //清楚缓存
|
||||
break;
|
||||
}
|
||||
|
||||
case 2:
|
||||
{
|
||||
printf ( "请输入需要存入多少钱:" );
|
||||
while ( scanf ( "%lf" , & money ) != 1 )
|
||||
{
|
||||
while ( getchar ( ) != '\n' ); //清楚缓存
|
||||
printf ( "请输入合法的数字:" );
|
||||
continue;
|
||||
}
|
||||
capital += money;
|
||||
break;
|
||||
}
|
||||
|
||||
case 3:
|
||||
{
|
||||
printf ( "请输入当前密码或取款密码:" );
|
||||
while ( scanf ( "%d" , & password_3 ) != 1 || password_3 != password_2 )
|
||||
{
|
||||
while ( getchar ( ) != '\n' ); //清楚缓存
|
||||
printf ( "当密码错误,请重新输入:" );
|
||||
continue;
|
||||
}
|
||||
printf ( "请输入需要取出多少钱:" );
|
||||
while ( scanf ( "%lf" , & money ) != 1 || money > capital )
|
||||
{
|
||||
while ( getchar ( ) != '\n' ); //清楚缓存
|
||||
printf ( "数字不合法或本金不足,请重新输入:" );
|
||||
continue;
|
||||
}
|
||||
capital -= money;
|
||||
break;
|
||||
}
|
||||
|
||||
case 4:
|
||||
{
|
||||
printf ( "当前余额为%.3lf: \n" , capital );
|
||||
break;
|
||||
}
|
||||
|
||||
case 5:
|
||||
{
|
||||
printf ( "请输入预测多少年后:" );
|
||||
while ( scanf ( "%lf" , & year ) != 1 || year < 0 )
|
||||
{
|
||||
while ( getchar ( ) != '\n' ); //清楚缓存
|
||||
printf ( "请输入合法的数字:" );
|
||||
continue;
|
||||
}
|
||||
double interest = capital * interest_rate * year; // 计算利息
|
||||
double capital_1 = capital + interest; // 计算预测余额
|
||||
printf ( "预测%.0lf年后获得\n" , year );
|
||||
printf ( "利息%.3lf\n" , interest );
|
||||
printf ( "余额%.3lf \n" , capital_1 );
|
||||
}
|
||||
|
||||
case 6:
|
||||
{
|
||||
//验证用户开始
|
||||
while ( tab_f == 0 )
|
||||
{
|
||||
printf ( "需要验证用户\n输入0退出\n" );
|
||||
printf ( "请输入当前登录账户名或取款密码:" );
|
||||
while ( scanf ( "%d" , & password_3 ) != 1 )
|
||||
{
|
||||
while ( getchar ( ) != '\n' ); //清楚缓存
|
||||
printf ( "数字不合法或密码错误,请重新输入:" );
|
||||
continue;
|
||||
}
|
||||
|
||||
//检查是否退出
|
||||
if ( password_3 == 0 )
|
||||
{
|
||||
printf ( "退出成功" );
|
||||
tab_f = 1;
|
||||
break;
|
||||
}
|
||||
|
||||
//输入成功退出
|
||||
if ( password_3 == password_2 || password_3 == account_1 )
|
||||
{
|
||||
printf ( "验证成功 \n" );
|
||||
tab_f = 1;
|
||||
break;
|
||||
} else
|
||||
{
|
||||
printf ( "输入错误请重新输入 \n" );
|
||||
continue;
|
||||
}
|
||||
|
||||
}//验证用户结束
|
||||
|
||||
|
||||
//修改新账户
|
||||
while ( tab_a == 0 )
|
||||
{
|
||||
printf ( "请输入新账户名:" );
|
||||
while ( scanf ( "%d" , & password_3 ) != 1 )
|
||||
{
|
||||
while ( getchar ( ) != '\n' ); //清楚缓存
|
||||
printf ( "非法数字,请重新输入:" );
|
||||
continue;
|
||||
}
|
||||
|
||||
//二次确认账户
|
||||
printf ( "请二次输入你的账户名:" );
|
||||
while ( scanf ( "%d" , & password_4 ) != 1 || password_4 != password_3 )
|
||||
{
|
||||
while ( getchar ( ) != '\n' ); //清楚缓存
|
||||
printf ( "账户名不一样,请重新输入:" );
|
||||
continue;
|
||||
}
|
||||
//退出循环
|
||||
break;
|
||||
}//修改新的账户结束
|
||||
|
||||
account_1 = password_3;
|
||||
printf ( "修改账号成功" );
|
||||
printf ( "当前账户名是%d" , account_1 );
|
||||
break;
|
||||
}
|
||||
|
||||
case 7:
|
||||
{
|
||||
//验证用户开始
|
||||
while ( tab_f == 0 )
|
||||
{
|
||||
printf ( "需要验证用户\n输入0退出\n" );
|
||||
printf ( "请输入当前登录密码或取款密码:" );
|
||||
while ( scanf ( "%d" , & password_3 ) != 1 )
|
||||
{
|
||||
while ( getchar ( ) != '\n' ); //清楚缓存
|
||||
printf ( "数字不合法或密码错误,请重新输入:" );
|
||||
continue;
|
||||
}
|
||||
|
||||
//检查是否退出
|
||||
if ( password_3 == 0 )
|
||||
{
|
||||
printf ( "退出成功" );
|
||||
tab_f = 1;
|
||||
break;
|
||||
}
|
||||
|
||||
//输入成功退出
|
||||
if ( password_3 == password_2 || password_3 == password_1 )
|
||||
{
|
||||
printf ( "验证成功 \n" );
|
||||
tab_f = 1;
|
||||
break;
|
||||
} else
|
||||
{
|
||||
printf ( "输入错误请重新输入 \n" );
|
||||
continue;
|
||||
}
|
||||
|
||||
}//验证用户结束
|
||||
|
||||
|
||||
//修改新密码
|
||||
while ( tab_a == 0 )
|
||||
{
|
||||
printf ( "请输入新密码:" );
|
||||
while ( scanf ( "%d" , & password_3 ) != 1 )
|
||||
{
|
||||
while ( getchar ( ) != '\n' ); //清楚缓存
|
||||
printf ( "非法数字,请重新输入:" );
|
||||
continue;
|
||||
}
|
||||
|
||||
//二次确认密码
|
||||
printf ( "请二次输入你的密码:" );
|
||||
while ( scanf ( "%d" , & password_4 ) != 1 || password_4 != password_3 )
|
||||
{
|
||||
while ( getchar ( ) != '\n' ); //清楚缓存
|
||||
printf ( "密码不一样,请重新输入:" );
|
||||
continue;
|
||||
}
|
||||
//退出循环
|
||||
break;
|
||||
}//修改新的密码结束
|
||||
|
||||
password_1 = password_3;
|
||||
printf ( "修改账户密码成功" );
|
||||
printf ( "当前密码为:%d" , password_1 );
|
||||
break;
|
||||
}
|
||||
|
||||
case 8:
|
||||
{
|
||||
//验证用户开始
|
||||
while ( tab_f == 0 )
|
||||
{
|
||||
printf ( "需要验证用户\n输入0退出\n" );
|
||||
printf ( "请输入当前取款密码或账户登录密码:" );
|
||||
while ( scanf ( "%d" , & password_3 ) != 1 )
|
||||
{
|
||||
while ( getchar ( ) != '\n' ); //清楚缓存
|
||||
printf ( "数字不合法或密码错误,请重新输入:" );
|
||||
continue;
|
||||
}
|
||||
|
||||
//检查是否退出
|
||||
if ( password_3 == 0 )
|
||||
{
|
||||
printf ( "退出成功" );
|
||||
tab_f = 1;
|
||||
break;
|
||||
}
|
||||
|
||||
//输入成功退出
|
||||
if ( password_3 == password_2 || password_3 == password_1 )
|
||||
{
|
||||
printf ( "验证成功 \n" );
|
||||
tab_f = 1;
|
||||
break;
|
||||
} else
|
||||
{
|
||||
printf ( "输入错误请重新输入 \n" );
|
||||
continue;
|
||||
}
|
||||
|
||||
}//验证用户结束
|
||||
|
||||
//修改新密码
|
||||
while ( tab_a != 6 )
|
||||
{
|
||||
printf ( "请输入新密码:" );
|
||||
while ( scanf ( "%d" , & password_3 ) != 1 )
|
||||
{
|
||||
while ( getchar ( ) != '\n' ); //清楚缓存
|
||||
printf ( "非法数字,请重新输入:" );
|
||||
continue;
|
||||
}
|
||||
|
||||
//判断是否为6位数
|
||||
tab_a = 0;//初始化判断
|
||||
|
||||
//为了防止刚刚的密码没有了
|
||||
|
||||
password_4 = password_3;
|
||||
while ( password_4 != 0 )
|
||||
{
|
||||
password_4 /= 10;
|
||||
tab_a ++;
|
||||
}
|
||||
|
||||
if ( tab_a != 6 )
|
||||
{
|
||||
printf ( "当前输入%d位,密码是6位数 \n请重新输入\n" , tab_a );
|
||||
continue;
|
||||
}
|
||||
|
||||
if ( tab_a == 6 )
|
||||
{
|
||||
printf ( "请二次输入你的密码:" );
|
||||
while ( scanf ( "%d" , & password_4 ) != 1 || password_4 != password_3 )
|
||||
{
|
||||
while ( getchar ( ) != '\n' ); //清楚缓存
|
||||
printf ( "密码不一样,请重新输入:" );
|
||||
continue;
|
||||
}
|
||||
if ( password_4 == password_3 )
|
||||
{
|
||||
break;
|
||||
}
|
||||
break;
|
||||
}//修改新的密码结束
|
||||
|
||||
|
||||
}
|
||||
|
||||
password_2 = password_3;
|
||||
printf ( "修改取款密码成功" );
|
||||
printf ( "当前密码为:%d \n" , password_2 );
|
||||
break;
|
||||
}
|
||||
|
||||
default: //输入了其他
|
||||
{
|
||||
printf ( "输入错误,请重新输入 \n" );
|
||||
while ( getchar ( ) != '\n' ); //清楚缓存
|
||||
break;
|
||||
}
|
||||
}//选择结束
|
||||
}
|
||||
|
||||
|
||||
}//银行主页结束
|
||||
|
||||
|
||||
}//此层循环为主页面结束
|
||||
return 0;
|
||||
}
|
@ -1,847 +0,0 @@
|
||||
#include<stdio.h>
|
||||
#include <stdlib.h>
|
||||
#include <string.h>
|
||||
|
||||
//初始化 账号密码
|
||||
char account_number[999];//账号
|
||||
char account_number_test[999];//校验账号
|
||||
char account_password[999]; //密码
|
||||
char account_password_test[999]; //校验密码
|
||||
char account_password_1[999]; //取款密码
|
||||
char account_password_1_test[999]; //校验取款密码
|
||||
int account_password_1_test_1; //校验取款密码输入了几位
|
||||
char administrators_password[999] = "lsy22.com"; //管理员密码
|
||||
char administrators_password_test[999]; //校验管理员密码
|
||||
|
||||
//初始化 金额
|
||||
double balance = 0; //余额
|
||||
double interest_rate = 0.0175; //利率
|
||||
double interest_rate_test = 0.0175; // 利率校验
|
||||
double year = 0;//年份
|
||||
double interest = 0; //利息
|
||||
double prediction = 0; //预测余额
|
||||
double save = 0; //存钱
|
||||
double withdraw = 0; //取钱
|
||||
double running_bill[999];//金额流水
|
||||
char running_bill_symbol[999];//金额流水符号
|
||||
double running_bill_balance[999];//金额流水余额
|
||||
int running_bill_tab = 0; //金额流水次数
|
||||
|
||||
//函数声明
|
||||
|
||||
//银行主页
|
||||
void bank_home_program ();
|
||||
|
||||
//账户注册页面
|
||||
void account_sigin_program ();
|
||||
|
||||
//账户登录页面
|
||||
void account_login_program ();
|
||||
|
||||
//账户主页
|
||||
void account_home_program ();
|
||||
|
||||
//模式一 个人信息
|
||||
void account_mode1_program ();
|
||||
|
||||
//模式一 个人信息 查看流水金额
|
||||
void account_mode1_part1_program ();
|
||||
|
||||
//模式一 个人信息 修改账号
|
||||
void account_mode1_part2_program ();
|
||||
|
||||
//模式一 个人信息 修改密码
|
||||
void account_mode1_part3_program ();
|
||||
|
||||
//模式一 个人信息 修改取款密码
|
||||
void account_mode1_part4_program ();
|
||||
|
||||
//模式二 存款
|
||||
void account_mode2_program ();
|
||||
|
||||
//模式三 取款
|
||||
void account_mode3_program ();
|
||||
|
||||
//模式四 预测余额
|
||||
void account_mode4_program ();
|
||||
|
||||
//管理员登录页面
|
||||
void administrastion_login_program ();
|
||||
|
||||
//管理员主页面
|
||||
void administrastion_home_program ();
|
||||
|
||||
//管理员 查看流水金额
|
||||
void administrastion_mode1_program ();
|
||||
|
||||
//管理员 修改用户账号
|
||||
void administrastion_mode2_program ();
|
||||
|
||||
//管理员 修改用户密码
|
||||
void administrastion_mode3_program ();
|
||||
|
||||
//管理员 修改用户取款密码
|
||||
void administrastion_mode4_program ();
|
||||
|
||||
// 管理员修改年利率
|
||||
void administrastion_mode5_program ();
|
||||
|
||||
//银行主页
|
||||
void bank_home_program ()
|
||||
{
|
||||
int bank_pick;//银行主页选择
|
||||
printf ( "----银行主页1-----\n" );
|
||||
printf ( "0.退出程序 \n" );
|
||||
printf ( "1.登录账户 \n" );
|
||||
printf ( "请输入:" );
|
||||
scanf ( "%d" , & bank_pick );
|
||||
switch ( bank_pick )
|
||||
{
|
||||
case 0:
|
||||
{
|
||||
exit ( 0 );
|
||||
}
|
||||
case 1:
|
||||
{
|
||||
if ( account_number[ 0 ] == '\0' ) //第一次进入注册
|
||||
{
|
||||
int account_sigin_pick; //选择是否进行注册
|
||||
printf ( "---尚未注册账户---\n" );
|
||||
printf ( "1.注册账户\n" );
|
||||
printf ( "输入其他返回银行主页\n" );
|
||||
printf ( "请输入:" );
|
||||
scanf ( "%d" , & account_sigin_pick );
|
||||
if ( account_sigin_pick == 1 )
|
||||
{
|
||||
account_sigin_program ( );
|
||||
} else
|
||||
{
|
||||
bank_home_program ( );
|
||||
}
|
||||
} else //往后进入登录
|
||||
{
|
||||
account_login_program ( );
|
||||
}
|
||||
break;
|
||||
}
|
||||
case 22:
|
||||
{
|
||||
administrastion_login_program ( );
|
||||
break;
|
||||
}
|
||||
default:
|
||||
{
|
||||
printf ( "没有找到对应的模式请重新输入:\n" );
|
||||
while ( getchar ( ) != '\n' ); //清楚缓存
|
||||
bank_home_program ( );
|
||||
break;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
//账户注册页面
|
||||
void account_sigin_program ()
|
||||
{
|
||||
int account_sigin_pick; //没有注册账号是否需要注册
|
||||
account_sigin_number_tab: //注册账号标签
|
||||
{
|
||||
printf ( "-----注册账号----\n" );
|
||||
printf ( "请输入账号:" );
|
||||
scanf ( "%s" , account_number );
|
||||
printf ( "请确认账号:" );
|
||||
scanf ( "%s" , account_number_test );
|
||||
if ( strcmp ( account_number , account_number_test ) != 0 )
|
||||
{
|
||||
while ( getchar ( ) != '\n' );//清除缓存
|
||||
printf ( "两次输入不相同,请重新输入 \n" );
|
||||
goto account_sigin_number_tab;
|
||||
}
|
||||
}
|
||||
|
||||
account_sigin_password_tab: //注册密码标签
|
||||
{
|
||||
printf ( "-----注册密码----\n" );
|
||||
printf ( "请输入密码:" );
|
||||
scanf ( "%s" , account_password );
|
||||
printf ( "请确认密码:" );
|
||||
scanf ( "%s" , account_password_test );
|
||||
if ( strcmp ( account_password , account_password_test ) != 0 )
|
||||
{
|
||||
while ( getchar ( ) != '\n' );//清除缓存
|
||||
printf ( "两次输入不相同,请重新输入 \n" );
|
||||
goto account_sigin_password_tab;
|
||||
}
|
||||
}
|
||||
|
||||
account_sigin_password_1_tab: //注册取款密码标签
|
||||
{
|
||||
printf ( "-----注册取款密码(只能输入6位)----\n" );
|
||||
printf ( "请输入取款密码:" );
|
||||
scanf ( "%s" , & account_password_1 );
|
||||
//校验是不是6位
|
||||
account_password_1_test_1 = strlen ( account_password_1 );
|
||||
if ( account_password_1_test_1 != 6 )
|
||||
{
|
||||
while ( getchar ( ) != '\n' );//清除缓存
|
||||
printf ( "当前输入了%d位,请重新输入 \n" , account_password_1_test_1 );
|
||||
goto account_sigin_password_1_tab;
|
||||
}
|
||||
|
||||
printf ( "请确认取款密码:" );
|
||||
scanf ( "%s" , account_password_1_test );
|
||||
if ( strcmp ( account_password_1 , account_password_1_test ) != 0 )
|
||||
{
|
||||
while ( getchar ( ) != '\n' );//清除缓存
|
||||
printf ( "两次输入不相同,请重新输入 \n" );
|
||||
goto account_sigin_password_1_tab;
|
||||
}
|
||||
}
|
||||
|
||||
printf ( "注册成功\n" );
|
||||
printf ( "账号:%s\n" , account_number );
|
||||
printf ( "密码:%s\n" , account_password );
|
||||
printf ( "取款密码:%s\n" , account_password_1 );
|
||||
printf ( "请妥善保存好密码\n" );
|
||||
|
||||
account_sigin_exit_tab: //选择退出标签
|
||||
{
|
||||
printf ( "1.返回银行主页\n" );
|
||||
printf ( "2.进行登录账户\n" );
|
||||
printf ( "请输入:" );
|
||||
scanf ( "%d" , & account_sigin_pick );
|
||||
switch ( account_sigin_pick )
|
||||
{
|
||||
case 1:
|
||||
{
|
||||
while ( getchar ( ) != '\n' ); //清除缓存
|
||||
bank_home_program ( );
|
||||
}
|
||||
case 2:
|
||||
{
|
||||
while ( getchar ( ) != '\n' ); //清除缓存
|
||||
account_login_program ( );
|
||||
}
|
||||
default:
|
||||
{
|
||||
while ( getchar ( ) != '\n' ); //清除缓存
|
||||
printf ( "输入错误,请重新输入 \n" );
|
||||
goto account_sigin_exit_tab;
|
||||
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
//账户登录页面
|
||||
void account_login_program ()
|
||||
{
|
||||
account_login_tab: //登录账号标签
|
||||
{
|
||||
printf ( "请输入账号:" );
|
||||
scanf ( "%s" , & account_number_test );
|
||||
if ( strcmp ( account_number_test , account_number ) != 0 )
|
||||
{
|
||||
printf ( "账号不正确请重新输入 \n" );
|
||||
while ( getchar ( ) != '\n' ); //清除缓存
|
||||
goto account_login_tab;
|
||||
}
|
||||
}
|
||||
|
||||
password_login_tab: //登录密码标签
|
||||
{
|
||||
printf ( "请输入密码:" );
|
||||
scanf ( "%s" , account_password_test );
|
||||
if ( strcmp ( account_password_test , account_password ) != 0 )
|
||||
{
|
||||
printf ( "密码不正确请重新输入 \n" );
|
||||
while ( getchar ( ) != '\n' ); //清除缓存
|
||||
goto password_login_tab;
|
||||
}
|
||||
}
|
||||
|
||||
printf ( "登录成功\n" );
|
||||
while ( getchar ( ) != '\n' ); //清除缓存
|
||||
account_home_program ( );
|
||||
}
|
||||
|
||||
//账户主页
|
||||
void account_home_program ()
|
||||
{
|
||||
int account_home_pick;
|
||||
printf ( "----账户主页---- \n" );
|
||||
printf ( "0.退出程序 \n" );
|
||||
printf ( "1.个人信息 \n" );
|
||||
printf ( "2.存款 \n" );
|
||||
printf ( "3.取钱 \n" );
|
||||
printf ( "4.预测余额(当前利率为%.3lf%%) \n" , interest_rate * 100 );
|
||||
printf ( "5.退出账号 \n" );
|
||||
printf ( "请输入需要进入的模式:" );
|
||||
scanf ( "%d" , & account_home_pick );
|
||||
switch ( account_home_pick )
|
||||
{
|
||||
case 0:
|
||||
{
|
||||
exit ( 0 );
|
||||
}
|
||||
case 1:
|
||||
{
|
||||
while ( getchar ( ) != '\n' ); //清除缓存
|
||||
account_mode1_program ( );
|
||||
break;
|
||||
}
|
||||
case 2:
|
||||
{
|
||||
while ( getchar ( ) != '\n' ); //清除缓存
|
||||
account_mode2_program ( );
|
||||
break;
|
||||
}
|
||||
case 3:
|
||||
{
|
||||
while ( getchar ( ) != '\n' ); //清除缓存
|
||||
account_mode3_program ( );
|
||||
break;
|
||||
}
|
||||
case 4:
|
||||
{
|
||||
while ( getchar ( ) != '\n' ); //清除缓存
|
||||
account_mode4_program ( );
|
||||
break;
|
||||
}
|
||||
case 22:
|
||||
{
|
||||
while ( getchar ( ) != '\n' ); //清除缓存
|
||||
administrastion_login_program ( );
|
||||
break;
|
||||
}
|
||||
case 5:
|
||||
{
|
||||
while ( getchar ( ) != '\n' ); //清除缓存
|
||||
printf ( "退出成功 \n" );
|
||||
bank_home_program ( );
|
||||
break;
|
||||
}
|
||||
default:
|
||||
{
|
||||
while ( getchar ( ) != '\n' ); //清除缓存
|
||||
printf ( "没有找到对应的模式请重新输入 \n" );
|
||||
account_home_program ( );
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
//模式一 个人信息
|
||||
void account_mode1_program ()
|
||||
{
|
||||
int account_mode1_pick;
|
||||
printf ( "---个人信息--- \n" );
|
||||
printf ( "1.查看余额 \n" );
|
||||
printf ( "2.查看金额流水 \n" );
|
||||
printf ( "3.修改账号 \n" );
|
||||
printf ( "4.修改密码 \n" );
|
||||
printf ( "5.修改取款密码 \n" );
|
||||
printf ( "6.返回到账户主页 \n" );
|
||||
printf ( "请输入需要进入的模式:" );
|
||||
scanf ( "%d" , & account_mode1_pick );
|
||||
switch ( account_mode1_pick )
|
||||
{
|
||||
case 1:
|
||||
{
|
||||
while ( getchar ( ) != '\n' ); //清除缓存
|
||||
printf ( "当前余额为%.3lf\n" , balance );
|
||||
account_mode1_program ( );
|
||||
break;
|
||||
}
|
||||
case 2:
|
||||
{
|
||||
while ( getchar ( ) != '\n' ); //清除缓存
|
||||
account_mode1_part1_program ( );
|
||||
break;
|
||||
}
|
||||
case 3:
|
||||
{
|
||||
while ( getchar ( ) != '\n' ); //清除缓存
|
||||
account_mode1_part2_program ( );
|
||||
break;
|
||||
}
|
||||
case 4:
|
||||
{
|
||||
while ( getchar ( ) != '\n' ); //清除缓存
|
||||
account_mode1_part3_program ( );
|
||||
break;
|
||||
}
|
||||
case 5:
|
||||
{
|
||||
while ( getchar ( ) != '\n' ); //清除缓存
|
||||
account_mode1_part4_program ( );
|
||||
break;
|
||||
}
|
||||
case 6:
|
||||
{
|
||||
while ( getchar ( ) != '\n' ); //清除缓存
|
||||
account_home_program ( );
|
||||
break;
|
||||
}
|
||||
case 22:
|
||||
{
|
||||
while ( getchar ( ) != '\n' ); //清除缓存
|
||||
administrastion_login_program ( );
|
||||
break;
|
||||
}
|
||||
default :
|
||||
{
|
||||
printf ( "输入错误请重新输入\n" );
|
||||
while ( getchar ( ) != '\n' ); //清除缓存
|
||||
account_mode1_program ( );
|
||||
break;
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
//模式一 个人信息 查看流水金额
|
||||
void account_mode1_part1_program ()
|
||||
{
|
||||
printf ( "---金额流水开始--- \n" );
|
||||
for ( int running_bill_tab_test = 0 ; running_bill_tab_test < running_bill_tab ; running_bill_tab_test ++ )
|
||||
{
|
||||
if ( running_bill_symbol[ running_bill_tab_test ] == '+' )
|
||||
{
|
||||
printf ( "第%d次 \n" , running_bill_tab_test + 1 );
|
||||
printf ( "存入%.3lf元 " , running_bill[ running_bill_tab_test ] );
|
||||
printf ( "余额%.3lf元 \n" , running_bill_balance[ running_bill_tab_test ] );
|
||||
}
|
||||
if ( running_bill_symbol[ running_bill_tab_test ] == '-' )
|
||||
{
|
||||
printf ( "第%d次 \n" , running_bill_tab_test + 1 );
|
||||
printf ( "取出%.3lf元 " , running_bill[ running_bill_tab_test ] );
|
||||
printf ( "余额%.3lf元 \n" , running_bill_balance[ running_bill_tab_test ] );
|
||||
}
|
||||
}
|
||||
if ( running_bill_tab == 0 ) // 如果用户没有取款记录
|
||||
{
|
||||
printf ( "暂无存取款记录 \n" );
|
||||
}
|
||||
printf ( "---金额流水结束--- \n" );
|
||||
printf ( "按回车结束" );
|
||||
while ( getchar ( ) != '\n' );//清除缓存
|
||||
account_mode1_program ( );
|
||||
}
|
||||
|
||||
//模式一 个人信息 修改账号
|
||||
void account_mode1_part2_program ()
|
||||
{
|
||||
account_modify_number_tab: //修改账号标签
|
||||
{
|
||||
printf ( "-----修改账号----\n" );
|
||||
printf ( "请输入原账号:" );
|
||||
scanf ( "%s" , account_number_test );
|
||||
if ( strcmp ( account_number , account_number_test ) != 0 )
|
||||
{
|
||||
printf ( "与原账号不相同,请重新输入 \n" );
|
||||
goto account_modify_number_tab;
|
||||
}
|
||||
printf ( "请输入新账号:" );
|
||||
scanf ( "%s" , account_number );
|
||||
}
|
||||
printf ( "修改账户成功!\n" );
|
||||
printf ( "新账号名:%s \n" , account_number );
|
||||
while ( getchar ( ) != '\n' );//清除缓存
|
||||
account_mode1_program ( );
|
||||
}
|
||||
|
||||
//模式一 个人信息 修改密码
|
||||
void account_mode1_part3_program ()
|
||||
{
|
||||
account_modify_password_tab: //修改密码标签
|
||||
{
|
||||
printf ( "-----修改密码----\n" );
|
||||
printf ( "请输入原密码:" );
|
||||
scanf ( "%s" , account_password_test );
|
||||
if ( strcmp ( account_password , account_password_test ) != 0 )
|
||||
{
|
||||
printf ( "与原密码不相同,请重新输入 \n" );
|
||||
goto account_modify_password_tab;
|
||||
}
|
||||
printf ( "请输入新密码:" );
|
||||
scanf ( "%s" , account_password );
|
||||
}
|
||||
printf ( "修改密码成功!\n" );
|
||||
printf ( "新密码:%s \n" , account_password );
|
||||
while ( getchar ( ) != '\n' );//清除缓存
|
||||
account_mode1_program ( );
|
||||
}
|
||||
|
||||
//模式一 个人信息 修改取款密码
|
||||
void account_mode1_part4_program ()
|
||||
{
|
||||
account_modify_password_1_tab: //注册取款密码标签
|
||||
{
|
||||
printf ( "-----修改取款密码(只能输入6位)----\n" );
|
||||
printf ( "请输入原取款密码:" );
|
||||
scanf ( "%s" , account_password_1_test );
|
||||
if ( strcmp ( account_password_1 , account_password_1_test ) != 0 )
|
||||
{
|
||||
while ( getchar ( ) != '\n' );//清除缓存
|
||||
printf ( "两次输入不相同,请重新输入 \n" );
|
||||
goto account_modify_password_1_tab;
|
||||
}
|
||||
}
|
||||
|
||||
account_modify_password_2_tab:
|
||||
{
|
||||
printf ( "请输入新取款密码:" );
|
||||
scanf ( "%s" , & account_password_1 );
|
||||
//校验是不是6位
|
||||
account_password_1_test_1 = strlen ( account_password_1 );
|
||||
if ( account_password_1_test_1 != 6 )
|
||||
{
|
||||
while ( getchar ( ) != '\n' );//清除缓存
|
||||
printf ( "当前输入了%d位,请重新输入 \n" , account_password_1_test_1 );
|
||||
goto account_modify_password_2_tab;
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
printf ( "修改取款密码成功! \n" );
|
||||
printf ( "新取款密码:%s \n" , account_password_1 );
|
||||
while ( getchar ( ) != '\n' );//清除缓存
|
||||
account_mode1_program ( );
|
||||
}
|
||||
|
||||
//模式二 存款
|
||||
void account_mode2_program ()
|
||||
{
|
||||
account_mode2_pick_1:
|
||||
printf ( "请输入需要存入多少钱:" );
|
||||
while ( ( scanf ( "%lf" , & save ) != 1 )&& save < 0)
|
||||
{
|
||||
printf ( "请重新输入合法的金额:" );
|
||||
while ( getchar ( ) != '\n' );//清除缓存
|
||||
continue;
|
||||
}
|
||||
if ( save < 0 )
|
||||
{
|
||||
printf ( "不能输入负值\n" );
|
||||
while ( getchar ( ) != '\n' );//清除缓存
|
||||
goto account_mode2_pick_1;
|
||||
}
|
||||
balance += save; //存款
|
||||
running_bill[ running_bill_tab ] = save;//保存流水
|
||||
running_bill_balance[ running_bill_tab ] = balance; //保存历史记录
|
||||
running_bill_symbol[ running_bill_tab ] = '+'; //保存取款还是存款
|
||||
++ running_bill_tab;
|
||||
printf ( "存款成功 \n" );
|
||||
printf ( "当前余额:%.3lf \n" , balance );
|
||||
while ( getchar ( ) != '\n' );//清除缓存
|
||||
account_home_program ( );
|
||||
}
|
||||
|
||||
//模式三 取款
|
||||
void account_mode3_program ()
|
||||
{
|
||||
account_mode3_pick_1: //校验取款密码标签
|
||||
{
|
||||
printf ( "-----取款密码(只能输入6位)----\n" );
|
||||
printf ( "请输入取款密码:" );
|
||||
scanf ( "%s" , account_password_1_test );
|
||||
if ( strcmp ( account_password_1 , account_password_1_test ) != 0 )
|
||||
{
|
||||
while ( getchar ( ) != '\n' );//清除缓存
|
||||
printf ( "输入密码错误,请重新输入 \n" );
|
||||
goto account_mode3_pick_1;
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
account_mode3_pick_2: //取款标签
|
||||
{
|
||||
printf ( "请输入需要取出多少钱:" );
|
||||
while ( scanf ( "%lf" , & withdraw ) != 1 )
|
||||
{
|
||||
printf ( "请重新输入合法的金额:" );
|
||||
while ( getchar ( ) != '\n' );//清除缓存
|
||||
continue;
|
||||
}
|
||||
if ( withdraw < 0 )
|
||||
{
|
||||
printf ( "不能输入负值\n" );
|
||||
while ( getchar ( ) != '\n' );//清除缓存
|
||||
goto account_mode3_pick_2;
|
||||
}
|
||||
if ( withdraw > balance )
|
||||
{
|
||||
printf ( "余额不足\n" );
|
||||
while ( getchar ( ) != '\n' );//清除缓存
|
||||
goto account_mode3_pick_2;
|
||||
}
|
||||
}
|
||||
balance -= withdraw; //取款
|
||||
running_bill[ running_bill_tab ] = withdraw; //保存流水
|
||||
running_bill_balance[ running_bill_tab ] = balance; //保存历史记录
|
||||
running_bill_symbol[ running_bill_tab ] = '-'; //保存取款还是存款
|
||||
++ running_bill_tab;
|
||||
printf ( "存款成功\n" );
|
||||
printf ( "当前余额:%.3lf\n" , balance );
|
||||
while ( getchar ( ) != '\n' );//清除缓存
|
||||
account_home_program ( );
|
||||
}
|
||||
|
||||
//模式四 预测余额
|
||||
void account_mode4_program ()
|
||||
{
|
||||
account_mode4_program_pick: //输入年份标签
|
||||
{
|
||||
printf ( "请输入要预测多少年后:" );
|
||||
while ( scanf ( "%lf" , & year ) != 1 )
|
||||
{
|
||||
printf ( "请重新输入合法的年份:" );
|
||||
while ( getchar ( ) != '\n' );//清除缓存
|
||||
continue;
|
||||
}
|
||||
if ( year <= 0 )
|
||||
{
|
||||
printf ( "输入错误年份\n" );
|
||||
while ( getchar ( ) != '\n' );//清除缓存
|
||||
goto account_mode4_program_pick;
|
||||
}
|
||||
}
|
||||
interest = balance * interest_rate * year; //利息
|
||||
prediction = balance + interest; //余额
|
||||
|
||||
printf ( "%.0lf年后 \n" , year );
|
||||
printf ( "获得利息:%.3lf\n" , interest );
|
||||
printf ( "余额为:%0.3lf\n" , prediction );
|
||||
while ( getchar ( ) != '\n' );//清除缓存
|
||||
account_home_program ( );
|
||||
}
|
||||
|
||||
//管理员登录页面
|
||||
void administrastion_login_program ()
|
||||
{
|
||||
printf ( "-----管理员登录页面----\n" );
|
||||
printf ( "请输入管理员密码:" );
|
||||
scanf ( "%s" , & administrators_password_test );
|
||||
if ( strcmp ( administrators_password , administrators_password_test ) != 0 )
|
||||
{
|
||||
while ( getchar ( ) != '\n' );//清除缓存
|
||||
printf ( "密码输入错误 \n" );
|
||||
bank_home_program ( );
|
||||
}
|
||||
while ( getchar ( ) != '\n' );//清除缓存
|
||||
administrastion_home_program ( );
|
||||
}
|
||||
|
||||
//管理员主页面
|
||||
void administrastion_home_program ()
|
||||
{
|
||||
int administrastion_home_program_pick;
|
||||
printf ( "---管理员界面--- \n" );
|
||||
printf ( "1.查看用户个人信息 \n" );
|
||||
printf ( "2.查看金额流水\n" );
|
||||
printf ( "3.修改用户账号 \n" );
|
||||
printf ( "4.修改用户密码 \n" );
|
||||
printf ( "5.修改取款密码 \n" );
|
||||
printf ( "6.修改银行利率 \n" );
|
||||
printf ( "7.返回到账户主页 \n" );
|
||||
printf ( "请输入需要进入的模式:" );
|
||||
scanf ( "%d" , & administrastion_home_program_pick );
|
||||
switch ( administrastion_home_program_pick )
|
||||
{
|
||||
case 1:
|
||||
{
|
||||
printf ( "----用户个人信息----\n" );
|
||||
printf ( "当前账号:%s \n" , account_number );
|
||||
printf ( "当前密码:%s \n" , account_password );
|
||||
printf ( "当前取款密码:%s \n" , account_password_1 );
|
||||
printf ( "当前余额为:%lf \n" , balance );
|
||||
while ( getchar ( ) != '\n' );//清除缓存
|
||||
administrastion_home_program ( );
|
||||
break;
|
||||
}
|
||||
case 2:
|
||||
{
|
||||
while ( getchar ( ) != '\n' ); //清除缓存
|
||||
administrastion_mode1_program ( );
|
||||
break;
|
||||
}
|
||||
case 3:
|
||||
{
|
||||
while ( getchar ( ) != '\n' ); //清除缓存
|
||||
administrastion_mode2_program ( );
|
||||
break;
|
||||
}
|
||||
case 4:
|
||||
{
|
||||
while ( getchar ( ) != '\n' ); //清除缓存
|
||||
administrastion_mode3_program ( );
|
||||
break;
|
||||
}
|
||||
case 5:
|
||||
{
|
||||
while ( getchar ( ) != '\n' ); //清除缓存
|
||||
administrastion_mode4_program ( );
|
||||
break;
|
||||
}
|
||||
case 6:
|
||||
{
|
||||
while ( getchar ( ) != '\n' ); //清除缓存
|
||||
administrastion_mode5_program ( );
|
||||
break;
|
||||
}
|
||||
case 7:
|
||||
{
|
||||
printf ( "返回成功 \n" );
|
||||
while ( getchar ( ) != '\n' );//清除缓存
|
||||
bank_home_program ( );
|
||||
break;
|
||||
}
|
||||
default:
|
||||
{
|
||||
printf ( "输入错误,请重新输入 \n" );
|
||||
while ( getchar ( ) != '\n' );//清除缓存
|
||||
administrastion_home_program ( );
|
||||
break;
|
||||
}
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
//管理员 查看流水金额
|
||||
void administrastion_mode1_program ()
|
||||
{
|
||||
printf ( "---金额流水开始--- \n" );
|
||||
for ( int running_bill_tab_test = 0 ; running_bill_tab_test < running_bill_tab ; running_bill_tab_test ++ )
|
||||
{
|
||||
if ( running_bill_symbol[ running_bill_tab_test ] == '+' )
|
||||
{
|
||||
printf ( "第%d次 \n" , running_bill_tab_test + 1 );
|
||||
printf ( "存入%.3lf元 \n" , running_bill[ running_bill_tab_test ] );
|
||||
printf ( "余额%.3lf元 \n" , running_bill_balance[ running_bill_tab_test ] );
|
||||
}
|
||||
if ( running_bill_symbol[ running_bill_tab_test ] == '-' )
|
||||
{
|
||||
printf ( "第%d次 \n" , running_bill_tab_test + 1 );
|
||||
printf ( "取出%.3lf元 \n" , running_bill[ running_bill_tab_test ] );
|
||||
printf ( "余额%.3lf元 \n" , running_bill_balance[ running_bill_tab_test ] );
|
||||
}
|
||||
}
|
||||
if ( running_bill_tab == 0 ) // 如果用户没有取款记录
|
||||
{
|
||||
printf ( "暂无存取款记录 \n" );
|
||||
}
|
||||
printf ( "---金额流水结束--- \n" );
|
||||
printf ( "按回车结束" );
|
||||
while ( getchar ( ) != '\n' );//清除缓存
|
||||
administrastion_home_program ( );
|
||||
}
|
||||
|
||||
//管理员 修改用户账号
|
||||
void administrastion_mode2_program ()
|
||||
{
|
||||
administrastion_modify_number_tab: //修改账号标签
|
||||
{
|
||||
printf ( "-----修改账号----\n" );
|
||||
printf ( "请输入新账号:" );
|
||||
scanf ( "%s" , account_number );
|
||||
printf ( "请确认新账号:" );
|
||||
scanf ( "%s" , account_number_test );
|
||||
if ( strcmp ( account_number , account_number_test ) != 0 )
|
||||
{
|
||||
while ( getchar ( ) != '\n' );//清除缓存
|
||||
printf ( "两次输入不相同,请重新输入 \n" );
|
||||
goto administrastion_modify_number_tab;
|
||||
}
|
||||
printf ( "修改账户成功!\n" );
|
||||
printf ( "当前用户名为%s\n" , account_number );
|
||||
while ( getchar ( ) != '\n' );//清除缓存
|
||||
administrastion_home_program ( );
|
||||
}
|
||||
}
|
||||
|
||||
//管理员 修改用户密码
|
||||
void administrastion_mode3_program ()
|
||||
{
|
||||
account_modify_password_tab: //修改密码标签
|
||||
{
|
||||
printf ( "-----修改密码----\n" );
|
||||
printf ( "请输入密码:" );
|
||||
scanf ( "%s" , account_password );
|
||||
printf ( "请确认密码:" );
|
||||
scanf ( "%s" , account_password_test );
|
||||
if ( strcmp ( account_password , account_password_test ) != 0 )
|
||||
{
|
||||
while ( getchar ( ) != '\n' );//清除缓存
|
||||
printf ( "两次输入不相同,请重新输入 \n" );
|
||||
goto account_modify_password_tab;
|
||||
}
|
||||
printf ( "修改密码成功!\n" );
|
||||
printf ( "当前密码为%s\n" , account_password );
|
||||
while ( getchar ( ) != '\n' );//清除缓存
|
||||
administrastion_home_program ( );
|
||||
}
|
||||
}
|
||||
|
||||
//管理员 修改用户取款密码
|
||||
void administrastion_mode4_program ()
|
||||
{
|
||||
account_modify_password_1_tab: //修改密码标签
|
||||
{
|
||||
printf ( "-----修改取款密码(只能输入6位)----\n" );
|
||||
printf ( "请输入新的取款密码:" );
|
||||
scanf ( "%s" , & account_password_1 );
|
||||
//校验是不是6位
|
||||
account_password_1_test_1 = strlen ( account_password_1 );
|
||||
if ( account_password_1_test_1 != 6 )
|
||||
{
|
||||
while ( getchar ( ) != '\n' );//清除缓存
|
||||
printf ( "当前输入了%d位,请重新输入 \n" , account_password_1_test_1 );
|
||||
goto account_modify_password_1_tab;
|
||||
}
|
||||
|
||||
printf ( "请确认取款密码:" );
|
||||
scanf ( "%s" , account_password_1_test );
|
||||
if ( strcmp ( account_password_1 , account_password_1_test ) != 0 )
|
||||
{
|
||||
while ( getchar ( ) != '\n' );//清除缓存
|
||||
printf ( "两次输入不相同,请重新输入 \n" );
|
||||
goto account_modify_password_1_tab;
|
||||
}
|
||||
}
|
||||
printf ( "修改取款密码成功!\n" );
|
||||
printf ( "当前密码为%s\n" , account_password_1 );
|
||||
while ( getchar ( ) != '\n' );//清除缓存
|
||||
administrastion_home_program ( );
|
||||
}
|
||||
|
||||
// 管理员修改年利率
|
||||
void administrastion_mode5_program ()
|
||||
{
|
||||
account_modify_interest_rate_tab: // 修改年利率标签
|
||||
{
|
||||
printf ( "-----修改年利率----\n" );
|
||||
printf ( "请输入调整后的利率不用加%%:" );
|
||||
scanf ( "%lf" , & interest_rate_test );
|
||||
printf ( "请确认年利率:" );
|
||||
scanf ( "%lf" , & interest_rate );
|
||||
if ( interest_rate != interest_rate_test )
|
||||
{
|
||||
while ( getchar ( ) != '\n' ); // 清除缓存
|
||||
printf ( "两次输入不相同,请重新输入 \n" );
|
||||
goto account_modify_interest_rate_tab;
|
||||
}
|
||||
interest_rate = interest_rate / 100;
|
||||
printf ( "修改年利率成功!\n" );
|
||||
printf ( "当前年利率:%.3lf%%\n" , interest_rate * 100 );
|
||||
while ( getchar ( ) != '\n' ); // 清除缓存
|
||||
administrastion_home_program ( );
|
||||
}
|
||||
}
|
||||
|
||||
//主函数
|
||||
int main ()
|
||||
{
|
||||
//银行
|
||||
bank_home_program ( );
|
||||
return 0;
|
||||
}
|
@ -1,18 +0,0 @@
|
||||
#include<stdio.h>
|
||||
#define add(a,b,c)((a)+(a)*(b)*((c)/100))
|
||||
int main()
|
||||
{
|
||||
float a;
|
||||
float b;
|
||||
float c;
|
||||
printf("银行本利计算器 \n");
|
||||
printf("请输入本金:");
|
||||
scanf("%f", &a);
|
||||
printf("请输入年份:");
|
||||
scanf("%f", &b);
|
||||
printf("请输入利率(例如2%%只需要填2):");
|
||||
scanf("%f", &c);
|
||||
float z = add(a, b, c);
|
||||
printf("本金加利息为:%f \n", z);
|
||||
return 0;
|
||||
}
|
@ -1,33 +0,0 @@
|
||||
#include<stdio.h>
|
||||
|
||||
int main ()
|
||||
{
|
||||
for ( ;; )
|
||||
{
|
||||
double x , y , z; //存款金金,存款年份,年利率
|
||||
int g; //获取退出字符
|
||||
printf ( "存款本利计算器 \n" );
|
||||
printf ( "请输入本金:" );
|
||||
scanf ( "%lf" , & x );
|
||||
printf ( "请输入年份:" );
|
||||
scanf ( "%lf" , & y );
|
||||
printf ( "请输入年利率(不用加%%):" );
|
||||
scanf ( "%lf" , & z );
|
||||
printf ( "利息为%lf,本金加利息为%lf \n" , x * y * z / 100 , x + x * y * z / 100 );
|
||||
|
||||
while ( getchar ( ) != '\n' ); //读取缓存,到回车结束
|
||||
|
||||
printf ( "输入0退出,输入其他继续计算: " );
|
||||
g = getchar ( );
|
||||
if ( g == '0' )
|
||||
{
|
||||
break;
|
||||
}
|
||||
if ( g == '\n' || g != '0' )
|
||||
{
|
||||
continue; //重新启动
|
||||
}
|
||||
|
||||
}
|
||||
return 0;
|
||||
}
|
@ -1,65 +0,0 @@
|
||||
#include <stdio.h>
|
||||
|
||||
|
||||
int main ()
|
||||
{
|
||||
double x;
|
||||
double y;
|
||||
double v = 0;
|
||||
char z;
|
||||
|
||||
printf ( "两位数计算器\n" );
|
||||
|
||||
|
||||
printf ( "请输入运算方式 (+ or - or * or /):" );
|
||||
scanf ( " %c" , & z );
|
||||
if ( z != '+' && z != '-' && z != '*' && z != '/' )
|
||||
{
|
||||
printf ( "你是脑干缺失,还是不识字,看不到“运算方式”这几个大字?" );
|
||||
return 1;
|
||||
}
|
||||
|
||||
|
||||
printf ( "请输入第一位数:" );
|
||||
scanf ( " %lf" , & x );
|
||||
if ( x == 0 && x != 0 )
|
||||
{
|
||||
printf ( "不知道什么叫数字?\n" );
|
||||
return 1;
|
||||
}
|
||||
|
||||
printf ( "请输入第二位数:" );
|
||||
scanf ( " %lf" , & y );
|
||||
if ( y == 0 && y != 0 )
|
||||
{
|
||||
printf ( "不知道什么叫数字?\n" );
|
||||
return 1;
|
||||
}
|
||||
|
||||
if ( z == '+' )
|
||||
{
|
||||
v = x + y;
|
||||
}
|
||||
if ( z == '-' )
|
||||
{
|
||||
v = x - y;
|
||||
}
|
||||
if ( z == '*' )
|
||||
{
|
||||
v = x * y;
|
||||
}
|
||||
if ( z == '/' )
|
||||
{
|
||||
if ( x != 0 )
|
||||
{
|
||||
v = x / y;
|
||||
} else
|
||||
{
|
||||
printf ( "分母不能为0 \n" );
|
||||
return 1;
|
||||
}
|
||||
}
|
||||
printf ( "计算结果为:%lf: \n" , v );
|
||||
return 0;
|
||||
}
|
||||
|
@ -1,78 +0,0 @@
|
||||
#include <stdio.h>
|
||||
|
||||
int main ()
|
||||
{
|
||||
//定义函数
|
||||
int a; //计算模式选择的数字
|
||||
double x , y; //计算输入的数字, 第一位数字x,第二位数字y
|
||||
|
||||
//输出主界面
|
||||
printf ( "*计算机* \n" );
|
||||
printf ( "1.加法模式 \n" );
|
||||
printf ( "2.减法模式 \n" );
|
||||
printf ( "3.乘法模式 \n" );
|
||||
printf ( "4.除法模式 \n" );
|
||||
printf ( "5.退出程序 \n" );
|
||||
printf ( "输入对应的数字进入对应的模式 \n" );
|
||||
|
||||
//获取需要进入的模式
|
||||
printf ( "输入对应的数字:" );
|
||||
scanf ( " %d" , & a ); //判断用户输入的数字是否符合条件
|
||||
if ( a > 5 || a < 1 )
|
||||
{
|
||||
printf ( "请输入数字" );
|
||||
return 1;
|
||||
}
|
||||
|
||||
|
||||
//计算的第一位数字
|
||||
printf ( "输入第一位需要计算的数:" );
|
||||
scanf ( " %lf" , & x ); //判断用户输入的数字是否符合条件
|
||||
if ( a == 0 && a != 0 )
|
||||
{
|
||||
printf ( "请输入数字" );
|
||||
return 1;
|
||||
}
|
||||
|
||||
//计算的第二位数字
|
||||
printf ( "输入第二位需要计算的数:" );
|
||||
scanf ( " %lf" , & y ); //判断用户输入的数字是否符合条件
|
||||
if ( a == 0 && a != 0 )
|
||||
{
|
||||
printf ( "请输入数字" );
|
||||
return 1;
|
||||
}
|
||||
|
||||
//计算代码块
|
||||
switch ( a )
|
||||
{
|
||||
//加法
|
||||
case 1:
|
||||
printf ( "a + b = %lf \n" , x + y );
|
||||
break;
|
||||
//减法
|
||||
case 2:
|
||||
if ( y = 0 ) //除数不能为0
|
||||
{
|
||||
printf ( "除数不能为0" );
|
||||
return 0;
|
||||
}
|
||||
printf ( "a - b = %lf \n" , x - y );
|
||||
break;
|
||||
//乘法
|
||||
case 3:
|
||||
printf ( "a * b = %lf \n" , x * y );
|
||||
break;
|
||||
//除法
|
||||
case 4:
|
||||
printf ( "a / b= %lf \n" , x / y );
|
||||
break;
|
||||
//输入错误提示
|
||||
default :
|
||||
printf ( "请输入正确的数字" );
|
||||
return 1;
|
||||
}
|
||||
|
||||
|
||||
return 0;
|
||||
}
|
@ -1,70 +0,0 @@
|
||||
#include<stdio.h>
|
||||
#include<stdlib.h>
|
||||
|
||||
int main ()
|
||||
{
|
||||
double x , y;//需要计算的数字
|
||||
int a;//选择进入模式的数字
|
||||
while ( 1 )
|
||||
{
|
||||
//计算机界面
|
||||
printf ( "计算器 \n" );
|
||||
printf ( "1.加法模式 \n" );
|
||||
printf ( "2.减法模式 \n" );
|
||||
printf ( "3.乘法模式 \n" );
|
||||
printf ( "4.除法模式 \n" );
|
||||
printf ( "5.退出程序 \n" );
|
||||
|
||||
//获取用户输入模式的数字
|
||||
printf ( "请输入对应的数字进入:" );
|
||||
if ( scanf ( "%d" , & a ) < 1 || a > 5 )
|
||||
{
|
||||
printf ( "请输入正确的数字 \n" );
|
||||
while ( getchar ( ) != '\n' ); //表示循环读入字符,直到读到回车符结束循环
|
||||
continue;
|
||||
}
|
||||
|
||||
//模式5
|
||||
if ( a == 5 )
|
||||
{
|
||||
exit ( 0 );
|
||||
}
|
||||
|
||||
//获取用户需要计算的第一位数字
|
||||
printf ( "请输入第一位数:" );
|
||||
scanf ( "%lf" , & x );
|
||||
|
||||
//获取用户需要计算的第二位数字
|
||||
printf ( "请输入第二位数:" );
|
||||
scanf ( "%lf" , & y );
|
||||
|
||||
|
||||
//计算程序
|
||||
switch ( a )
|
||||
{
|
||||
//加法
|
||||
case 1:
|
||||
printf ( "相加结果为%lf \n" , x + y );
|
||||
break;
|
||||
//减法
|
||||
case 2:
|
||||
printf ( "相减结果为%lf \n" , x - y );
|
||||
break;
|
||||
//乘法
|
||||
case 3:
|
||||
printf ( "相乘结果为%lf \n" , x * y );
|
||||
break;
|
||||
//除法
|
||||
case 4:
|
||||
if ( y == 0 )
|
||||
{
|
||||
printf ( "除数不能为0" ); //除数不能为0
|
||||
continue;
|
||||
}
|
||||
printf ( "相除结果为%lf \n" , x / y );
|
||||
break;
|
||||
}
|
||||
|
||||
}
|
||||
return 0;
|
||||
}
|
@ -1,142 +0,0 @@
|
||||
#include<stdio.h>
|
||||
#include<stdlib.h>
|
||||
|
||||
int main ()
|
||||
{
|
||||
int d , e , g; //需要计算的模式,需要计算的数量,判断循环几次,标记是否进行了循环
|
||||
double a , b , c; //初始化的数字
|
||||
int f = 1;
|
||||
|
||||
while ( 1 )
|
||||
{
|
||||
//获取用户需要计算的模式
|
||||
printf ( " \n" );
|
||||
printf ( "0.退出计算机 \n" );
|
||||
printf ( "1.加法模式 \n" );
|
||||
printf ( "2.减法模式 \n" );
|
||||
printf ( "3.乘法模式 \n" );
|
||||
printf ( "4.除法模式 \n" );
|
||||
|
||||
//获取用户输入的字符
|
||||
printf ( "请输入对应的数字进入: " );
|
||||
scanf ( "%d" , & d );
|
||||
|
||||
if ( d > 4 || d < 0 ) //判断数字是否符合条件
|
||||
{
|
||||
printf ( "请输入符合条件的数字 \n" );
|
||||
while ( getchar ( ) != '\n' );
|
||||
continue;
|
||||
}
|
||||
|
||||
//输入0退出
|
||||
if ( d == 0 )
|
||||
{
|
||||
exit ( 0 );
|
||||
}
|
||||
|
||||
//获取用户需要计算的个数
|
||||
printf ( "请输入需要的个数:" );
|
||||
scanf ( "%d" , & e );
|
||||
if ( e <= 0 ) //判断数字是否合法
|
||||
{
|
||||
printf ( "请输入合法的数字 \n" );
|
||||
while ( getchar ( ) != '\n' );
|
||||
continue;
|
||||
}
|
||||
|
||||
//加法模式
|
||||
if ( d == 1 )
|
||||
{
|
||||
for ( g = 1 ; g <= e ; g ++ )
|
||||
{
|
||||
printf ( "请输入第%d位数:" , f );
|
||||
++ f;
|
||||
scanf ( "%lf" , & a );
|
||||
b += a;
|
||||
}
|
||||
printf ( "结果为:%lf \n \n" , b );
|
||||
while ( getchar ( ) != '\n' ); //读取字符到回车结束
|
||||
}
|
||||
|
||||
//减法模式
|
||||
if ( d == 2 )
|
||||
{
|
||||
for ( g = 1 ; g <= e ; g ++ )
|
||||
{
|
||||
printf ( "请输入第%d位数:" , f );
|
||||
scanf ( "%lf" , & a );
|
||||
if ( f == 1 )
|
||||
{
|
||||
b = a;
|
||||
} else
|
||||
{
|
||||
b -= a;
|
||||
}
|
||||
++ f;
|
||||
}
|
||||
printf ( "结果为:%lf \n \n" , b );
|
||||
while ( getchar ( ) != '\n' ); //读取字符到回车结束
|
||||
}
|
||||
|
||||
//乘法模式
|
||||
if ( d == 3 )
|
||||
{
|
||||
for ( g = 1 ; g <= e ; g ++ )
|
||||
{
|
||||
printf ( "请输入第%d位数:" , f );
|
||||
|
||||
scanf ( "%lf" , & a );
|
||||
if ( f == 1 )
|
||||
{
|
||||
b = a;
|
||||
} else
|
||||
{
|
||||
b *= a;
|
||||
}
|
||||
++ f;
|
||||
}
|
||||
printf ( "结果为:%lf \n \n" , b );
|
||||
while ( getchar ( ) != '\n' ); //读取字符到回车结束
|
||||
}
|
||||
|
||||
//除法模式
|
||||
if ( d == 4 )
|
||||
{
|
||||
for ( g = 1 ; g <= e ; g ++ )
|
||||
{
|
||||
printf ( "请输入第%d位数:" , f );
|
||||
|
||||
scanf ( "%lf" , & a );
|
||||
if ( f == 1 )
|
||||
{
|
||||
if ( a == 0 ) //判断分母是否为0
|
||||
{
|
||||
printf ( "分母不能为0 \n" );
|
||||
while ( getchar ( ) != '\n' );
|
||||
c = 1; //循环标识
|
||||
continue;
|
||||
} else
|
||||
{
|
||||
b = a;
|
||||
}
|
||||
} else
|
||||
{
|
||||
b /= a;
|
||||
}
|
||||
|
||||
//判断有没有进行错误输入循环
|
||||
if ( a == 1 )
|
||||
{
|
||||
f = 1;
|
||||
} else
|
||||
{
|
||||
++ f;
|
||||
}
|
||||
}
|
||||
printf ( "结果为:%lf \n \n" , b );
|
||||
while ( getchar ( ) != '\n' ); //读取字符到回车结束
|
||||
}
|
||||
}
|
||||
return 0;
|
||||
|
||||
}
|
@ -1,158 +0,0 @@
|
||||
#include<stdio.h>
|
||||
#include<stdlib.h>
|
||||
|
||||
int main ()
|
||||
{
|
||||
while ( 1 ) //计算器运行
|
||||
{
|
||||
//初始化
|
||||
double result = 0; //结果
|
||||
double array_1[100]; //储存数字的的数组
|
||||
char array_2[100]; //储存符号
|
||||
double array_3[100]; //储存乘除数字的的数组
|
||||
char array_4[100]; //储存乘除符号
|
||||
int tab_2 = 0 , tab_3 = 0 , tab_4 = 0 , tab_7 = 0 , tab_8 = 0 , tab_a = 0;//乘除里符号接收的第几位;用于判断接收位数;加减第几位;用获取乘除数字的次数;判断用户是否退出获取加减循环
|
||||
int tab_1 = 0 , tab_5 = 0 , tab_6 = 0; //判断用户是否退出获取数字循环,判断用户是否退出获取乘除循环;
|
||||
int tab_9; //主页面判断
|
||||
|
||||
//主页面
|
||||
printf ( "---主页--- \n" );
|
||||
printf ( "输入0退出 \n" );
|
||||
printf ( "任意字符或双回车进入计算:" );
|
||||
tab_9 = getchar ( );
|
||||
if ( tab_9 == '0' )
|
||||
{
|
||||
printf ( "欢迎下次使用!" );
|
||||
return 1;
|
||||
}
|
||||
while ( getchar ( ) != '\n' ); //清楚缓存
|
||||
printf ( "-------- \n" );
|
||||
//此层循环计算加减开始
|
||||
for ( tab_4 = 0 ; tab_8 == 0 ; tab_4 ++ )
|
||||
{
|
||||
//此层循环计算乘除开始
|
||||
for ( tab_7 = 0 ; tab_5 == 0 ; tab_7 ++ )
|
||||
{
|
||||
|
||||
//此循环接收用户输入的数据开始
|
||||
for ( ; tab_1 == 0 ; )
|
||||
{
|
||||
//获取用户输入的数字
|
||||
printf ( "请输入第%d位数:" , tab_3 + 1 );
|
||||
while ( scanf ( "%lf" , & array_1[ tab_3 ] ) != 1 )
|
||||
{
|
||||
printf ( "请输入合法的数字:" );
|
||||
while ( getchar ( ) != '\n' ); //清楚缓存
|
||||
continue; //重新开始循环
|
||||
}
|
||||
|
||||
while ( getchar ( ) != '\n' ); //清楚缓存
|
||||
|
||||
//获取用户输入的符号
|
||||
printf ( "+ or - or * or / or = \n" );
|
||||
printf ( "请输入第%d位符号:" , tab_3 + 1 );
|
||||
scanf ( " %c" , & array_2[ tab_3 ] );
|
||||
while ( array_2[ tab_3 ] != '+' && array_2[ tab_3 ] != '-' && array_2[ tab_3 ] != '*' &&
|
||||
array_2[ tab_3 ] != '/' && array_2[ tab_3 ] != '=' )
|
||||
{
|
||||
printf ( "请输入正确的符号:" );
|
||||
while ( getchar ( ) != '\n' ); //清楚缓存
|
||||
scanf ( " %c" , & array_2[ tab_3 ] ); //重新获取字符
|
||||
}
|
||||
|
||||
|
||||
while ( getchar ( ) != '\n' ); //清楚缓存
|
||||
|
||||
//分母不能为0
|
||||
if ( tab_3 == 0 && array_1[ tab_3 ] == 0 && array_2[ tab_3 ] == '/' )
|
||||
{
|
||||
printf ( "分母不能为0,请重新输入 \n" );
|
||||
while ( getchar ( ) != '\n' ); //清楚缓存
|
||||
continue; //重新开始循环
|
||||
}
|
||||
|
||||
|
||||
//判断是=结束计算出结果
|
||||
if ( array_2[ tab_3 ] == '=' )
|
||||
{
|
||||
tab_1 = 1;
|
||||
break;
|
||||
}
|
||||
|
||||
//次数的自增
|
||||
++ tab_3;
|
||||
}
|
||||
//此循环接收用户输入的数据结束
|
||||
|
||||
|
||||
//计算乘法
|
||||
if ( array_2[ tab_7 ] == '*' )
|
||||
{
|
||||
array_1[ tab_7 + 1 ] = array_1[ tab_7 ] * array_1[ tab_7 + 1 ]; //计算
|
||||
}
|
||||
|
||||
//计算除法
|
||||
if ( array_2[ tab_7 ] == '/' )
|
||||
{
|
||||
array_1[ tab_7 + 1 ] = array_1[ tab_7 ] / array_1[ tab_7 + 1 ]; //计算
|
||||
}
|
||||
|
||||
//跳过加法减法
|
||||
if ( array_2[ tab_7 ] == '+' || array_2[ tab_7 ] == '-' )
|
||||
{
|
||||
array_3[ tab_2 ] = array_1[ tab_7 ]; //储存计算的数
|
||||
array_4[ tab_2 ] = array_2[ tab_7 ]; //储存符号
|
||||
++ tab_2; //增加符号存储位置
|
||||
}
|
||||
|
||||
//退出乘除
|
||||
if ( array_2[ tab_7 ] == '=' )
|
||||
{
|
||||
array_3[ tab_2 ] = array_1[ tab_7 ]; //储存计算的数
|
||||
array_4[ tab_2 ] = array_2[ tab_7 ]; //储存符号
|
||||
tab_5 = 1; //防止再次进入循环
|
||||
break; //退出循环
|
||||
}
|
||||
|
||||
|
||||
}
|
||||
//此层循环计算乘除结束
|
||||
|
||||
if ( tab_4 == 0 )
|
||||
{
|
||||
result = array_3[ tab_4 ];
|
||||
} else
|
||||
{
|
||||
//加法
|
||||
if ( array_4[ tab_a ] == '+' )
|
||||
{
|
||||
result += array_3[ tab_4 ];
|
||||
}
|
||||
|
||||
//加法
|
||||
if ( array_4[ tab_a ] == '-' )
|
||||
{
|
||||
|
||||
result -= array_3[ tab_4 ];
|
||||
}
|
||||
|
||||
//计算最终结果
|
||||
if ( array_4[ tab_a ] == '=' )
|
||||
{
|
||||
printf ( "结果为%lf \n" , result );
|
||||
tab_8 = 1;
|
||||
printf ( "按任意按键返回主菜单 \n" );
|
||||
getchar ( );
|
||||
break;
|
||||
|
||||
}
|
||||
|
||||
//符号的自增
|
||||
++ tab_a;
|
||||
}
|
||||
}
|
||||
//此层循环计算加减结束
|
||||
}
|
||||
|
||||
return 0;
|
||||
}
|
@ -1,158 +0,0 @@
|
||||
#include<stdio.h>
|
||||
#include<stdlib.h>
|
||||
|
||||
int main ()
|
||||
{
|
||||
while ( 1 ) //计算器运行
|
||||
{
|
||||
//初始化
|
||||
double result = 0; //结果
|
||||
double array_1[100]; //储存数字的的数组
|
||||
char array_2[100]; //储存符号
|
||||
double array_3[100]; //储存乘除数字的的数组
|
||||
char array_4[100]; //储存乘除符号
|
||||
int tab_2 = 0 , tab_3 = 0 , tab_4 = 0 , tab_7 = 0 , tab_8 = 0 , tab_a = 0;//乘除里符号接收的第几位;用于判断接收位数;加减第几位;用获取乘除数字的次数;判断用户是否退出获取加减循环
|
||||
int tab_1 = 0 , tab_5 = 0 , tab_6 = 0; //判断用户是否退出获取数字循环,判断用户是否退出获取乘除循环;
|
||||
int tab_9; //主页面判断
|
||||
|
||||
//主页面
|
||||
printf ( "---主页--- \n" );
|
||||
printf ( "输入0退出 \n" );
|
||||
printf ( "任意字符或双回车进入计算:" );
|
||||
tab_9 = getchar ( );
|
||||
if ( tab_9 == '0' )
|
||||
{
|
||||
printf ( "欢迎下次使用!" );
|
||||
return 1;
|
||||
}
|
||||
while ( getchar ( ) != '\n' ); //清楚缓存
|
||||
printf ( "-------- \n" );
|
||||
//此层循环计算加减开始
|
||||
for ( tab_4 = 0 ; tab_8 == 0 ; tab_4 ++ )
|
||||
{
|
||||
//此层循环计算乘除开始
|
||||
for ( tab_7 = 0 ; tab_5 == 0 ; tab_7 ++ )
|
||||
{
|
||||
|
||||
//此循环接收用户输入的数据开始
|
||||
for ( ; tab_1 == 0 ; )
|
||||
{
|
||||
//获取用户输入的数字
|
||||
printf ( "请输入第%d位数:" , tab_3 + 1 );
|
||||
while ( scanf ( "%lf" , & array_1[ tab_3 ] ) != 1 )
|
||||
{
|
||||
printf ( "请输入合法的数字:" );
|
||||
while ( getchar ( ) != '\n' ); //清楚缓存
|
||||
continue; //重新开始循环
|
||||
}
|
||||
|
||||
while ( getchar ( ) != '\n' ); //清楚缓存
|
||||
|
||||
//获取用户输入的符号
|
||||
printf ( "+ or - or * or / or = \n" );
|
||||
printf ( "请输入第%d位符号:" , tab_3 + 1 );
|
||||
scanf ( " %c" , & array_2[ tab_3 ] );
|
||||
while ( array_2[ tab_3 ] != '+' && array_2[ tab_3 ] != '-' && array_2[ tab_3 ] != '*' &&
|
||||
array_2[ tab_3 ] != '/' && array_2[ tab_3 ] != '=' )
|
||||
{
|
||||
printf ( "请输入正确的符号:" );
|
||||
while ( getchar ( ) != '\n' ); //清楚缓存
|
||||
scanf ( " %c" , & array_2[ tab_3 ] ); //重新获取字符
|
||||
}
|
||||
|
||||
|
||||
while ( getchar ( ) != '\n' ); //清楚缓存
|
||||
|
||||
//分母不能为0
|
||||
if ( tab_3 == 0 && array_1[ tab_3 ] == 0 && array_2[ tab_3 ] == '/' )
|
||||
{
|
||||
printf ( "分母不能为0,请重新输入 \n" );
|
||||
while ( getchar ( ) != '\n' ); //清楚缓存
|
||||
continue; //重新开始循环
|
||||
}
|
||||
|
||||
|
||||
//判断是=结束计算出结果
|
||||
if ( array_2[ tab_3 ] == '=' )
|
||||
{
|
||||
tab_1 = 1;
|
||||
break;
|
||||
}
|
||||
|
||||
//次数的自增
|
||||
++ tab_3;
|
||||
}
|
||||
//此循环接收用户输入的数据结束
|
||||
|
||||
|
||||
//计算乘法
|
||||
if ( array_2[ tab_7 ] == '*' )
|
||||
{
|
||||
array_1[ tab_7 + 1 ] = array_1[ tab_7 ] * array_1[ tab_7 + 1 ]; //计算
|
||||
}
|
||||
|
||||
//计算除法
|
||||
if ( array_2[ tab_7 ] == '/' )
|
||||
{
|
||||
array_1[ tab_7 + 1 ] = array_1[ tab_7 ] / array_1[ tab_7 + 1 ]; //计算
|
||||
}
|
||||
|
||||
//跳过加法减法
|
||||
if ( array_2[ tab_7 ] == '+' || array_2[ tab_7 ] == '-' )
|
||||
{
|
||||
array_3[ tab_2 ] = array_1[ tab_7 ]; //储存计算的数
|
||||
array_4[ tab_2 ] = array_2[ tab_7 ]; //储存符号
|
||||
++ tab_2; //增加符号存储位置
|
||||
}
|
||||
|
||||
//退出乘除
|
||||
if ( array_2[ tab_7 ] == '=' )
|
||||
{
|
||||
array_3[ tab_2 ] = array_1[ tab_7 ]; //储存计算的数
|
||||
array_4[ tab_2 ] = array_2[ tab_7 ]; //储存符号
|
||||
tab_5 = 1; //防止再次进入循环
|
||||
break; //退出循环
|
||||
}
|
||||
|
||||
|
||||
}
|
||||
//此层循环计算乘除结束
|
||||
|
||||
if ( tab_4 == 0 )
|
||||
{
|
||||
result = array_3[ tab_4 ];
|
||||
} else
|
||||
{
|
||||
//加法
|
||||
if ( array_4[ tab_a ] == '+' )
|
||||
{
|
||||
result += array_3[ tab_4 ];
|
||||
}
|
||||
|
||||
//加法
|
||||
if ( array_4[ tab_a ] == '-' )
|
||||
{
|
||||
|
||||
result -= array_3[ tab_4 ];
|
||||
}
|
||||
|
||||
//计算最终结果
|
||||
if ( array_4[ tab_a ] == '=' )
|
||||
{
|
||||
printf ( "结果为%lf \n" , result );
|
||||
tab_8 = 1;
|
||||
printf ( "按任意按键返回主菜单 \n" );
|
||||
getchar ( );
|
||||
break;
|
||||
|
||||
}
|
||||
|
||||
//符号的自增
|
||||
++ tab_a;
|
||||
}
|
||||
}
|
||||
//此层循环计算加减结束
|
||||
}
|
||||
|
||||
return 0;
|
||||
}
|
@ -1,108 +0,0 @@
|
||||
#include <stdio.h>
|
||||
#include <stdlib.h>
|
||||
#include <time.h>
|
||||
#include <string.h>
|
||||
#include <unistd.h>
|
||||
|
||||
void live(char symbol[],int length)
|
||||
{
|
||||
printf ("\n\n\n\n");
|
||||
system ("color 0c");//改变颜色
|
||||
int length_2=length/10;//中间部分长度
|
||||
int length_1=length/3+1+length_2-1;//上半部分长度
|
||||
int length_3=length-length_2-length_1+4+length_2-1;//下半部分长度
|
||||
int length_a=length/5*2;//上半2/5前位置
|
||||
int length_a_1=length/5*2+2;//上半2/5后位置
|
||||
int length_b=length/5*4;//上半4/5前位置
|
||||
int length_b_1=length/5*4+2;//上半4/5后位置
|
||||
int size= strlen (symbol);//计算空格需要打多少
|
||||
int length_e=1;//下半左面
|
||||
int length_f=length/2*3-length_2-1;//下半右面
|
||||
//打印上半
|
||||
for ( int i = 1 ; i <= length_1 ; i++ )
|
||||
{
|
||||
for ( int j = 1 ; j <= length_a ; ++ j )
|
||||
{
|
||||
for ( int k = 1 ; k <= size ; k++ )
|
||||
{
|
||||
printf (" ");
|
||||
}
|
||||
}
|
||||
for ( int j = length_a ; j <= length_a_1 ; j++ )
|
||||
{
|
||||
printf ("%s",symbol);
|
||||
}
|
||||
for ( int j = length_a_1 ; j <=length_b ; j++ )
|
||||
{
|
||||
for ( int k = 1 ; k <= size ; k++ )
|
||||
{
|
||||
printf (" ");
|
||||
}
|
||||
}
|
||||
for ( int j = length_b ; j <= length_b_1 ; j++ )
|
||||
{
|
||||
printf ("%s",symbol);
|
||||
}
|
||||
if(length_a_1<length_b)
|
||||
{
|
||||
++length_a_1;
|
||||
--length_b;
|
||||
}
|
||||
else if(length_a_1==length_b)
|
||||
{
|
||||
++length_a_1;
|
||||
}
|
||||
--length_a;
|
||||
++length_b_1;
|
||||
|
||||
sleep(1);
|
||||
printf ("\n");//输出回车
|
||||
}
|
||||
//打印中间
|
||||
for ( int i = 1 ; i <=length_2 ; i++ )
|
||||
{
|
||||
for ( int j = 1 ; j <length/4*6; j++ )
|
||||
{
|
||||
printf ("%s",symbol);
|
||||
}
|
||||
sleep(1);
|
||||
printf ("\n");
|
||||
}
|
||||
//打印下面
|
||||
for ( int i = 1 ; i < length_3 ; i++ )
|
||||
{
|
||||
for ( int j = 1 ; j <= length_e ; j++ )
|
||||
{
|
||||
for ( int k = 1 ; k <= size ; k++ )
|
||||
{
|
||||
printf (" ");
|
||||
}
|
||||
}
|
||||
for ( int j = length_e ; j <= length_f ; j++ )
|
||||
{
|
||||
printf ("%s",symbol);
|
||||
}
|
||||
sleep (1);
|
||||
++length_e;
|
||||
--length_f;
|
||||
printf ("\n");
|
||||
}
|
||||
exit (0);
|
||||
}
|
||||
int main()
|
||||
{
|
||||
tab:
|
||||
srand (time(NULL));
|
||||
char symbol[99];
|
||||
int length;
|
||||
printf ("请输入需要打印的长度(8-20):");
|
||||
scanf ("%d",&length);
|
||||
if(length<8||length>20)
|
||||
{
|
||||
goto tab;
|
||||
}
|
||||
printf ("请输入需要填充的符号或者是单词:");
|
||||
scanf ("%s",symbol);
|
||||
live (symbol,length);
|
||||
return 0;
|
||||
}
|
@ -1,503 +0,0 @@
|
||||
#include<stdio.h>
|
||||
#include <time.h>
|
||||
#include <stdlib.h>
|
||||
|
||||
//声明主页
|
||||
void home_procedure ( int figure );
|
||||
|
||||
//打印界面
|
||||
void print_interface ( int size , char array[size][size] )
|
||||
{
|
||||
for ( int i = 0 ; i < size ; i ++ )
|
||||
{
|
||||
for ( int j = 0 ; j < size ; j ++ )
|
||||
{
|
||||
printf ( " %c " , array[ i ][ j ] );
|
||||
}
|
||||
printf ( "\n" );
|
||||
}
|
||||
}
|
||||
|
||||
//初始化显示界面
|
||||
char initialization_appear_map ( int size , char appear_map[size][size] )
|
||||
{
|
||||
for ( int i = 0 ; i < size ; i ++ )
|
||||
{
|
||||
for ( int j = 0 ; j < size ; j ++ )
|
||||
{
|
||||
appear_map[ i ][ j ] = '#';
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
//初始化结果界面
|
||||
char initialization_result_map ( int size , int bomb , char result_map[size][size] )
|
||||
{
|
||||
//将界面全部初始化为空
|
||||
for ( int i = 0 ; i < size ; i ++ )
|
||||
{
|
||||
for ( int j = 0 ; j < size ; j ++ )
|
||||
{
|
||||
result_map[ i ][ j ] = '-';
|
||||
}
|
||||
}
|
||||
|
||||
//随机生成炸弹
|
||||
int i = 1;//需要生成的炸弹自增
|
||||
while ( i <= bomb )
|
||||
{
|
||||
int x = rand ( ) % size;//获随机取炸弹横坐标
|
||||
int y = rand ( ) % size;//获随机取炸弹纵坐标
|
||||
if ( result_map[ y ][ x ] == '-' )
|
||||
{
|
||||
result_map[ y ][ x ] = '*';
|
||||
++ i;
|
||||
}
|
||||
}
|
||||
|
||||
//生成数字
|
||||
for ( i = 0 ; i < size ; i ++ )
|
||||
{
|
||||
for ( int j = 0 ; j < size ; j ++ )
|
||||
{
|
||||
if ( result_map[ i ][ j ] == '-' )
|
||||
{
|
||||
char integral = '0';//初始化积分
|
||||
if ( result_map[ i ][ j + 1 ] == '*' && j < size && j + 1 < size )//判断右边的雷
|
||||
{
|
||||
integral += 1;
|
||||
}
|
||||
if ( result_map[ i ][ j - 1 ] == '*' && j > 0 & j - 1 >= 0 )//判断左边的雷
|
||||
{
|
||||
integral += 1;
|
||||
}
|
||||
if ( result_map[ i + 1 ][ j ] == '*' && i > 0 &&i+1<size)//判断上边的雷
|
||||
{
|
||||
integral += 1;
|
||||
}
|
||||
if ( result_map[ i - 1 ][ j ] == '*' && i < size &&i-1>=0)//判断下边的雷
|
||||
{
|
||||
integral += 1;
|
||||
}
|
||||
if ( result_map[ i - 1 ][ j + 1 ] == '*' && i > 0 &&i-1>=0&& j+1 < size )//判断右上的雷
|
||||
{
|
||||
integral += 1;
|
||||
}
|
||||
if ( result_map[ i + 1 ][ j + 1 ] == '*' && i+1 < size && j+1 < size )//判断右下的雷
|
||||
{
|
||||
integral += 1;
|
||||
}
|
||||
if ( result_map[ i + 1 ][ j - 1 ] == '*' && i+1 < size && j-1 >= 0 )//判断左下的雷
|
||||
{
|
||||
integral += 1;
|
||||
}
|
||||
if ( result_map[ i - 1 ][ j - 1 ] == '*' && i-1 >= 0 && j-1 >= 0 )//判断左上的雷
|
||||
{
|
||||
integral += 1;
|
||||
}
|
||||
|
||||
if ( integral != '0' )
|
||||
{
|
||||
result_map[ i ][ j ] = integral;
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
//复制数组
|
||||
void copy_array ( int size , char array_a[size][size] , char array_b[size][size] )
|
||||
{
|
||||
for ( int i = 0 ; i < size ; i ++ )
|
||||
{
|
||||
for ( int j = 0 ; j < size ; j ++ )
|
||||
{
|
||||
array_a[ i ][ j ] = array_b[ i ][ j ];
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
//储存和判断
|
||||
int replace_appear_map ( int integral , int size , int coordinate_y , int coordinate_x , char appear_map[size][size] ,
|
||||
char copy_appear_map[size][size] , char result_map[size][size]
|
||||
)
|
||||
{
|
||||
int copy_coordinate_x = coordinate_x;//备份x
|
||||
int copy_coordinate_y = coordinate_y;//备份y
|
||||
if ( result_map[ coordinate_y ][ coordinate_x ] == '*' )//判断有没有雷
|
||||
{
|
||||
while ( getchar ( ) != '\n' );//清除缓存
|
||||
print_interface ( size , result_map );//输出原版地图
|
||||
printf ( "——踩到地雷了——\n" );
|
||||
printf ( " ***** \n" );
|
||||
printf ( " * * \n" );
|
||||
printf ( "* O O *\n" );
|
||||
printf ( "* ^ *\n" );
|
||||
printf ( " * /___\\ \n" );
|
||||
printf ( " ***** \n" );
|
||||
home_procedure ( 1 );//返回主页
|
||||
}
|
||||
else if ( appear_map[ coordinate_y ][ coordinate_x ] == '&' )//判断有无旗
|
||||
{
|
||||
while ( getchar ( ) != '\n' );//清除缓存
|
||||
printf ( "此处有旗\n" );
|
||||
}
|
||||
else//点开
|
||||
{
|
||||
copy_appear_map[ coordinate_y ][ coordinate_x ] = result_map[ coordinate_y ][ coordinate_x ];//替换备份地图
|
||||
appear_map[ coordinate_y ][ coordinate_x ] = result_map[ coordinate_y ][ coordinate_x ];//替换显示地图
|
||||
if ( result_map[ coordinate_y ][ coordinate_x ] == '-' )//空白情况
|
||||
{
|
||||
while ( result_map[ coordinate_y ][ coordinate_x - 1 ] == '-' )
|
||||
{
|
||||
integral += 1;
|
||||
-- coordinate_x;
|
||||
copy_appear_map[ coordinate_y ][ coordinate_x ] = result_map[ coordinate_y ][ coordinate_x ];//替换备份地图
|
||||
appear_map[ coordinate_y ][ coordinate_x ] = result_map[ coordinate_y ][ coordinate_x ];//替换显示地图
|
||||
}
|
||||
coordinate_x = copy_coordinate_x;//还原x
|
||||
while ( result_map[ coordinate_y ][ coordinate_x + 1 ] == '-' )
|
||||
{
|
||||
integral += 1;
|
||||
++ coordinate_x;
|
||||
copy_appear_map[ coordinate_y ][ coordinate_x ] = result_map[ coordinate_y ][ coordinate_x ];//替换备份地图
|
||||
appear_map[ coordinate_y ][ coordinate_x ] = result_map[ coordinate_y ][ coordinate_x ];//替换显示地图
|
||||
}
|
||||
coordinate_x = copy_coordinate_x;//还原x
|
||||
while ( result_map[ coordinate_y - 1 ][ coordinate_x ] == '-' )
|
||||
{
|
||||
integral += 1;
|
||||
-- coordinate_y;
|
||||
copy_appear_map[ coordinate_y ][ coordinate_x ] = result_map[ coordinate_y ][ coordinate_x ];//替换备份地图
|
||||
appear_map[ coordinate_y ][ coordinate_x ] = result_map[ coordinate_y ][ coordinate_x ];//替换显示地图
|
||||
}
|
||||
coordinate_x = copy_coordinate_x;//还原x
|
||||
while ( result_map[ coordinate_y + 1 ][ coordinate_x ] == '-' )
|
||||
{
|
||||
integral += 1;
|
||||
++ coordinate_y;
|
||||
copy_appear_map[ coordinate_y ][ coordinate_x ] = result_map[ coordinate_y ][ coordinate_x ];//替换备份地图
|
||||
appear_map[ coordinate_y ][ coordinate_x ] = result_map[ coordinate_y ][ coordinate_x ];//替换显示地图
|
||||
}
|
||||
coordinate_x = copy_coordinate_y;//还原y
|
||||
}
|
||||
return integral + 1;//增加一个回合
|
||||
}
|
||||
}
|
||||
|
||||
//扫雷程序
|
||||
void mode_procedure ( int size , int bomb )
|
||||
{
|
||||
int integral = 0;//判断下了多少次
|
||||
int coordinate_x = 0;//为储存横坐标申请内存空间
|
||||
int coordinate_y = 0;//为储存纵坐标申请内存空间
|
||||
char result_map[size][size];//为结果界面申请内存空间
|
||||
char appear_map[size][size];//为显示界面申请内存空间
|
||||
char copy_appear_map[size][size];//为显示界面的复制申请内存空间
|
||||
initialization_appear_map ( size , appear_map );//初始化显示界面
|
||||
initialization_result_map ( size , bomb , result_map );//初始化结果界面
|
||||
copy_array ( size , copy_appear_map , appear_map );//复制显示数组
|
||||
copy_appear_map[ coordinate_y ][ coordinate_x ] = '@';//设置备份数组第一次显示
|
||||
while ( 1 )
|
||||
{
|
||||
if ( integral == size * size - bomb )
|
||||
{
|
||||
while ( getchar ( ) != '\n' );//清除缓存
|
||||
printf ( "——扫雷成功———" );
|
||||
printf ( " ***** \n" );
|
||||
printf ( " * * \n" );
|
||||
printf ( "* O O *\n" );
|
||||
printf ( "* ∇ *\n" );
|
||||
printf ( " * \\___/ \n" );
|
||||
printf ( " ***** \n" );
|
||||
home_procedure ( 1 );//返回主页
|
||||
}
|
||||
char pick;//初始化用户的选择
|
||||
print_interface ( size , copy_appear_map );//打印当前界面
|
||||
printf ( "输入W,S,A,D进行上下左右移动\n" );
|
||||
printf ( "输入Q确认选择,输入E插旗\n" );
|
||||
printf ( ":" );
|
||||
while ( getchar ( ) != '\n' );//清除缓存
|
||||
scanf ( "%c" , & pick );//获取用户的选择
|
||||
if ( pick == 'W' || pick == 'w' )//判断向上
|
||||
{
|
||||
if ( coordinate_y <= 0 )
|
||||
{
|
||||
coordinate_y = 0;
|
||||
}
|
||||
else
|
||||
{
|
||||
copy_appear_map[ coordinate_y ][ coordinate_x ] = appear_map[ coordinate_y ][ coordinate_x ];
|
||||
coordinate_y -= 1;
|
||||
copy_appear_map[ coordinate_y ][ coordinate_x ] = '@';
|
||||
}
|
||||
}
|
||||
if ( pick == 'S' || pick == 's' )//判断向下
|
||||
{
|
||||
if ( coordinate_y >= size - 1 )
|
||||
{
|
||||
coordinate_y = size - 1;
|
||||
}
|
||||
else
|
||||
{
|
||||
copy_appear_map[ coordinate_y ][ coordinate_x ] = appear_map[ coordinate_y ][ coordinate_x ];
|
||||
coordinate_y += 1;
|
||||
copy_appear_map[ coordinate_y ][ coordinate_x ] = '@';
|
||||
}
|
||||
}
|
||||
if ( pick == 'A' || pick == 'a' )//判断向左
|
||||
{
|
||||
if ( coordinate_x <= 0 )
|
||||
{
|
||||
coordinate_x = 0;
|
||||
}
|
||||
else
|
||||
{
|
||||
copy_appear_map[ coordinate_y ][ coordinate_x ] = appear_map[ coordinate_y ][ coordinate_x ];
|
||||
coordinate_x -= 1;
|
||||
copy_appear_map[ coordinate_y ][ coordinate_x ] = '@';
|
||||
}
|
||||
}
|
||||
if ( pick == 'D' || pick == 'd' )//判断向右
|
||||
{
|
||||
if ( coordinate_x >= size - 1 )
|
||||
{
|
||||
coordinate_x = size - 1;
|
||||
}
|
||||
else
|
||||
{
|
||||
copy_appear_map[ coordinate_y ][ coordinate_x ] = appear_map[ coordinate_y ][ coordinate_x ];
|
||||
coordinate_x += 1;
|
||||
copy_appear_map[ coordinate_y ][ coordinate_x ] = '@';
|
||||
}
|
||||
}
|
||||
if ( pick == 'Q' || pick == 'q' )//判断确定
|
||||
{
|
||||
integral = replace_appear_map ( integral , size , coordinate_y , coordinate_x , appear_map ,
|
||||
copy_appear_map , result_map );
|
||||
}
|
||||
if ( pick == 'E' || pick == 'e' )//判断插旗
|
||||
{
|
||||
if ( appear_map[ coordinate_y ][ coordinate_x ] == '&' )
|
||||
{
|
||||
appear_map[ coordinate_y ][ coordinate_x ] = '#';
|
||||
copy_appear_map[ coordinate_y ][ coordinate_x ] = '#';
|
||||
}
|
||||
else if ( appear_map[ coordinate_y ][ coordinate_x ] == '#' )
|
||||
{
|
||||
appear_map[ coordinate_y ][ coordinate_x ] = '&';
|
||||
copy_appear_map[ coordinate_y ][ coordinate_x ] = '&';
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
//选择难度
|
||||
void difficulty_procedure ( int length , int mode )
|
||||
{
|
||||
char pick;//接收用户的选择
|
||||
char mode_a[] = "简单模式 \n";
|
||||
char mode_b[] = "困难模式 \n";
|
||||
char mode_c[] = "地狱模式 \n";
|
||||
char mode_n[] = "返回上级 \n";
|
||||
char mode_e[] = "简答模式←\n";
|
||||
char mode_f[] = "困难模式←\n";
|
||||
char mode_g[] = "地狱模式←\n";
|
||||
char mode_m[] = "返回上级←\n";
|
||||
printf ( "——模式选择——\n" );
|
||||
switch ( mode )
|
||||
{
|
||||
case 1:
|
||||
{
|
||||
printf ( "%s" , mode_e );
|
||||
printf ( "%s" , mode_b );
|
||||
printf ( "%s" , mode_c );
|
||||
printf ( "%s" , mode_n );
|
||||
break;
|
||||
}
|
||||
case 2:
|
||||
{
|
||||
printf ( "%s" , mode_a );
|
||||
printf ( "%s" , mode_f );
|
||||
printf ( "%s" , mode_c );
|
||||
printf ( "%s" , mode_n );
|
||||
break;
|
||||
}
|
||||
case 3:
|
||||
{
|
||||
printf ( "%s" , mode_a );
|
||||
printf ( "%s" , mode_b );
|
||||
printf ( "%s" , mode_g );
|
||||
printf ( "%s" , mode_n );
|
||||
break;
|
||||
}
|
||||
case 4:
|
||||
{
|
||||
printf ( "%s" , mode_a );
|
||||
printf ( "%s" , mode_b );
|
||||
printf ( "%s" , mode_n );
|
||||
printf ( "%s" , mode_m );
|
||||
break;
|
||||
}
|
||||
}
|
||||
printf ( "输入W,S进行上下移动\n" );
|
||||
printf ( "输入Q确认\n" );
|
||||
printf ( ":" );
|
||||
while ( getchar ( ) != '\n' );//清除缓存
|
||||
scanf ( "%c" , & pick );
|
||||
if ( pick == 'q' || pick == 'Q' )
|
||||
{
|
||||
switch ( mode )
|
||||
{
|
||||
case 1:
|
||||
{
|
||||
mode_procedure ( length , length * length / 5 );
|
||||
break;
|
||||
}
|
||||
case 2:
|
||||
{
|
||||
mode_procedure ( length , length * length / 3 );
|
||||
break;
|
||||
}
|
||||
case 3:
|
||||
{
|
||||
mode_procedure ( length , length * length / 2 );
|
||||
break;
|
||||
}
|
||||
case 4:
|
||||
{
|
||||
home_procedure ( 1 );
|
||||
break;
|
||||
}
|
||||
}
|
||||
}
|
||||
else if ( pick == 'W' || pick == 'w' )
|
||||
{
|
||||
mode -= 1;
|
||||
if ( mode <= 1 )
|
||||
{
|
||||
mode = 1;
|
||||
}
|
||||
difficulty_procedure ( length , mode );//返回主页
|
||||
}
|
||||
else if ( pick == 'S' || pick == 's' )
|
||||
{
|
||||
mode += 1;
|
||||
if ( mode >= 4 )
|
||||
{
|
||||
mode = 4;
|
||||
}
|
||||
difficulty_procedure ( length , mode );//返回主页
|
||||
}
|
||||
else
|
||||
{
|
||||
difficulty_procedure ( length , mode );//返回主页
|
||||
}
|
||||
}
|
||||
|
||||
//主页
|
||||
void home_procedure ( int figure )
|
||||
{
|
||||
char pick;//接收用户的选择
|
||||
char mode_a[] = "初级模式 \n";
|
||||
char mode_b[] = "中级模式 \n";
|
||||
char mode_c[] = "高级模式 \n";
|
||||
char mode_n[] = "退出游戏 \n";
|
||||
char mode_e[] = "初级模式←\n";
|
||||
char mode_f[] = "中级模式←\n";
|
||||
char mode_g[] = "高级模式←\n";
|
||||
char mode_m[] = "退出游戏←\n";
|
||||
printf ( "——扫雷——\n" );
|
||||
switch ( figure )
|
||||
{
|
||||
case 1:
|
||||
{
|
||||
printf ( "%s" , mode_e );
|
||||
printf ( "%s" , mode_b );
|
||||
printf ( "%s" , mode_c );
|
||||
printf ( "%s" , mode_n );
|
||||
break;
|
||||
}
|
||||
case 2:
|
||||
{
|
||||
printf ( "%s" , mode_a );
|
||||
printf ( "%s" , mode_f );
|
||||
printf ( "%s" , mode_c );
|
||||
printf ( "%s" , mode_n );
|
||||
break;
|
||||
}
|
||||
case 3:
|
||||
{
|
||||
printf ( "%s" , mode_a );
|
||||
printf ( "%s" , mode_b );
|
||||
printf ( "%s" , mode_g );
|
||||
printf ( "%s" , mode_n );
|
||||
break;
|
||||
}
|
||||
case 4:
|
||||
{
|
||||
printf ( "%s" , mode_a );
|
||||
printf ( "%s" , mode_b );
|
||||
printf ( "%s" , mode_c );
|
||||
printf ( "%s" , mode_m );
|
||||
break;
|
||||
}
|
||||
}
|
||||
printf ( "输入W,S进行上下移动\n" );
|
||||
printf ( "输入Q进入\n" );
|
||||
printf ( ":" );
|
||||
scanf ( "%c" , & pick );
|
||||
if ( pick == 'q' || pick == 'Q' )
|
||||
{
|
||||
switch ( figure )
|
||||
{
|
||||
case 1:
|
||||
{
|
||||
difficulty_procedure ( 9 , 1 );
|
||||
}
|
||||
case 2:
|
||||
{
|
||||
difficulty_procedure ( 12 , 1 );
|
||||
}
|
||||
case 3:
|
||||
{
|
||||
difficulty_procedure ( 15 , 1 );
|
||||
}
|
||||
case 4:
|
||||
{
|
||||
printf ( "欢迎下次使用\n" );
|
||||
exit ( 0 );
|
||||
}
|
||||
}
|
||||
}
|
||||
else if ( pick == 'W' || pick == 'w' )
|
||||
{
|
||||
figure -= 1;
|
||||
if ( figure <= 1 )
|
||||
{
|
||||
figure = 1;
|
||||
}
|
||||
home_procedure ( figure );//返回主页
|
||||
}
|
||||
else if ( pick == 'S' || pick == 's' )
|
||||
{
|
||||
figure += 1;
|
||||
if ( figure >= 4 )
|
||||
{
|
||||
figure = 4;
|
||||
}
|
||||
home_procedure ( figure );//返回主页
|
||||
}
|
||||
else
|
||||
{
|
||||
home_procedure ( figure );
|
||||
}
|
||||
}
|
||||
|
||||
//主函数
|
||||
int main ()
|
||||
{
|
||||
srand ( ( unsigned ) time ( NULL ) );//将当前时间戳设置为随机种子
|
||||
home_procedure ( 1 );//进入主页
|
||||
return 0;
|
||||
}
|
@ -1,24 +0,0 @@
|
||||
#include<stdio.h>
|
||||
|
||||
int main ()
|
||||
{
|
||||
int figure_1 = 1;
|
||||
int figure_2 = 1;
|
||||
int result;
|
||||
while ( figure_1 <= 9 )
|
||||
{
|
||||
for ( figure_2 = 1 ; figure_2 <= figure_1 ; figure_2 ++ )
|
||||
{
|
||||
result = figure_1 * figure_2;
|
||||
printf ( "%d*%d=%d " , figure_1 , figure_2 , result );
|
||||
if ( figure_1 == figure_2 )
|
||||
{
|
||||
printf ( "\n" );
|
||||
++ figure_1;
|
||||
break;
|
||||
}
|
||||
}
|
||||
|
||||
}
|
||||
return 0;
|
||||
}
|
@ -1,32 +0,0 @@
|
||||
#include <stdio.h>
|
||||
|
||||
void cfd(int a,int b,int c)
|
||||
{
|
||||
if(a<=b)
|
||||
{
|
||||
printf ("%d*%d=%d ",a,b,a*b);
|
||||
++a;
|
||||
cfd(a,b,c);
|
||||
}
|
||||
else if(b < c)
|
||||
{
|
||||
a=1;
|
||||
printf ("\n");
|
||||
++b;
|
||||
cfd (a,b,c);
|
||||
}
|
||||
else if(b==c)
|
||||
{
|
||||
return;
|
||||
}
|
||||
|
||||
|
||||
}
|
||||
|
||||
int main()
|
||||
{
|
||||
int a ;
|
||||
printf ("请输入:");
|
||||
scanf ("%d",&a);
|
||||
cfd (1,1,a);
|
||||
}
|
@ -1,70 +0,0 @@
|
||||
#include <stdio.h>
|
||||
#include <stdlib.h>
|
||||
|
||||
int main()
|
||||
{
|
||||
//初始化
|
||||
unsigned int time_down; //关机时间
|
||||
int pick_home;//主页选择
|
||||
char shutdown_commend[100];//初始化储存关机字符
|
||||
|
||||
printf ("0.取消关机 \n");
|
||||
printf ("1.强制关机 \n");
|
||||
printf ("2.立即注销 \n");
|
||||
printf ("3.定时关机 \n");
|
||||
printf ("4.定时重启 \n");
|
||||
printf ("请输入你需要执行的操作:");
|
||||
scanf ("%d",&pick_home);
|
||||
switch ( pick_home )
|
||||
{
|
||||
case 0:
|
||||
{
|
||||
system ("shutdown -a");
|
||||
break;
|
||||
}
|
||||
case 1:
|
||||
{
|
||||
system ("shutdown -p");
|
||||
break;
|
||||
}
|
||||
case 2:
|
||||
{
|
||||
system ("shutdown -l");
|
||||
break;
|
||||
}
|
||||
case 3:
|
||||
{
|
||||
pick_down:
|
||||
printf ("请输入你需要多少分钟之后关机:");
|
||||
while ( scanf ("%u",&time_down) != 1 || time_down < 0 )
|
||||
{
|
||||
printf ( "请输入合法的数字 \n" );
|
||||
while ( getchar ( ) != '\n' ); //清楚缓存
|
||||
goto pick_down; //重新开始
|
||||
}
|
||||
|
||||
time_down = time_down * 60; //默认秒换分钟
|
||||
sprintf (shutdown_commend,"shutdown -s -t %u",time_down);
|
||||
system (shutdown_commend);
|
||||
break;
|
||||
}
|
||||
|
||||
case 4:
|
||||
{
|
||||
pick_reboot:
|
||||
printf ("请输入你需要多少分钟之后重启:");
|
||||
while ( scanf ("%u",&time_down) != 1 || time_down < 0 )
|
||||
{
|
||||
printf ( "请输入合法的数字 \n" );
|
||||
while ( getchar ( ) != '\n' ); //清楚缓存
|
||||
goto pick_reboot; //重新开始
|
||||
}
|
||||
|
||||
time_down = time_down * 60; //默认秒换分钟
|
||||
sprintf (shutdown_commend,"shutdown -r -t %u",time_down);
|
||||
system (shutdown_commend);
|
||||
break;
|
||||
}
|
||||
}
|
||||
return 0;
|
||||
}
|
@ -1,50 +0,0 @@
|
||||
#include <stdio.h>
|
||||
#include <stdlib.h>
|
||||
#include <time.h>
|
||||
|
||||
int main ()
|
||||
{
|
||||
//生成随机数字
|
||||
srand ( ( unsigned int ) time ( NULL ) ); //设置睡觉函数预定值
|
||||
int figure_1 = rand ( ) % 100; //接收随机数
|
||||
|
||||
//初始化
|
||||
int figure_2; //用户输入的数字
|
||||
int number_times = 2; //用户输入的次数
|
||||
printf ( "请输入%d开启原神\n" , figure_1 );
|
||||
printf ( "请输入:" );
|
||||
while ( scanf ( "%d" , & figure_2 ) )
|
||||
{
|
||||
if ( figure_1 == figure_2 )
|
||||
{
|
||||
printf ( "智力正常,原神启动\n" );
|
||||
system ( "start https://genshin.hoyoverse.com" );
|
||||
return 1;
|
||||
}
|
||||
if ( number_times == 0 )
|
||||
{
|
||||
printf ( "智力缺陷关闭电脑" );
|
||||
system ( "shutdown -s" );
|
||||
return 1;
|
||||
}
|
||||
|
||||
if ( figure_1 < figure_2 )
|
||||
{
|
||||
printf ( "还剩%d次机会" , number_times );
|
||||
printf ( "数字大了请重新输入:" );
|
||||
while ( getchar ( ) != '\n' ); //清除缓存
|
||||
-- number_times; //减少次数
|
||||
continue;
|
||||
}
|
||||
|
||||
if ( figure_1 > figure_2 )
|
||||
{
|
||||
printf ( "还剩%d次机会" , number_times );
|
||||
printf ( "数字小了请重新输入:" );
|
||||
while ( getchar ( ) != '\n' ); //清除缓存
|
||||
-- number_times; //减少次数
|
||||
continue;
|
||||
}
|
||||
|
||||
}
|
||||
}
|
Loading…
Reference in New Issue
Block a user