首页 > 其他分享 >C语言-猜拳游戏二次开发

C语言-猜拳游戏二次开发

时间:2024-03-06 13:57:08浏览次数:19  
标签:case 游戏 no int C语言 break printf 二次开发 猜拳

引言

当探究猜拳游戏的魅力时,人们往往会陶醉于其古老的历史和简单的规则之中。作为一种源远流长的竞技娱乐活动,猜拳游戏早已深入人们的生活,成为一种普遍且愉快的社交互动方式。然而,这看似简单的游戏背后却蕴含了深刻的智慧。在短暂的选择过程中,参与者不仅在思考自己的选择,更需要推测对手可能的动作,从而展现出战略思维和心理策略的较量。
而借助编程实现猜拳游戏的过程更是一种别样的乐趣。从规则设计到算法实现,每一个环节都是对逻辑思维和程序设计能力的考验。通过编程,我们能够深入探究猜拳游戏背后的数学逻辑和算法原理,体会游戏规则背后隐藏的程序化思维方式。
笔者选择了一个开源的猜拳游戏项目进行二次开发,以提升游戏的可玩性和趣味性,增加新的游戏元素,以期打造出更加吸引人的游戏版本。

原始代码

点击查看代码
#define _CRT_SECURE_NO_WARNINGS
#include<stdio.h>
#include<time.h>
#include<stdlib.h>
int main()
{
	int human;//玩家手势
	int comp;//电脑手势
	int judge;//判断输赢
	int retry;//是否继续游戏
	srand((unsigned int)time(NULL));//随机生成电脑的手势
	printf("游戏开始!\n");
	do 
	{
		comp = rand() % 3;
		do 
		{
			printf("\n石头剪刀布  (0)石头(1)剪刀(2)布:");
			scanf("%d", &human);//读取玩家的手势
		} while (human < 0 || human>2);
		printf("电脑出");
		switch (comp)//显示电脑的手势
		{
		case 0:printf("石头"); break;
		case 1:printf("剪刀"); break;
		case 2:printf("布"); break;
		}
		printf("玩家出");
		switch (human)//显示玩家的手势
		{
		case 0:printf("石头"); break;
		case 1:printf("剪刀"); break;
		case 2:printf("布"); break;
		}
		printf(".\n");
		judge = (human - comp + 3) % 3;判断胜负
		switch(judge)
		{
		case 0:printf("平局\n"); break;
		case 1:printf("你输了\n"); break;
		case 2:printf("你赢了\n"); break;
		}
		printf("再来一次吗(0)否(1)是:");
		scanf("%d", &retry);
	} while (retry==1);
	return 0;
}

游戏运行界面

原程序存在的缺点

1.单一函数设计:原程序中所有的代码逻辑都写在一个main函数中,使得代码比较臃肿,不利于代码的维护和扩展。

2.缺乏模块化:原程序缺乏模块化划分,导致代码结构不清晰,难以理清各个部分的功能和逻辑。

3.输出信息不够友好:原程序中输出的信息比较简单,用户体验相对较差,缺乏足够的交互和提示,影响了用户对游戏的参与度。

4.错误处理不完善:原程序在读取玩家手势时,只简单判断了输入是否在范围内,缺乏对输入错误的处理,可能导致程序在用户输入错误时出现异常情况。

5.缺乏统计功能:原程序没有提供统计游戏胜负次数的功能,无法直观地展示玩家和计算机的对战情况,缺乏完整性。

优化方案

1.模块化设计:优化后的代码将功能模块化,将不同功能的代码分开编写在不同的函数中,提高了代码的可读性和可维护性。

2.友好的交互:优化后的代码增加了更加用户友好的交互方式,包括更清晰的提示信息和更生动的游戏过程展现,提升了用户体验。

3.更清晰的输出信息:优化后的代码通过修改输出方式,让信息呈现更加清晰明了,使用户更易理解游戏的规则和结果。

4.拓展性强:优化后的代码通过函数抽象,方便扩展游戏的规则和功能,具有更高的灵活性和可定制性。

5.错误处理完善:优化后的代码在读取玩家手势时增加了对输入的合法性判断,加强了错误处理,提高了程序的稳定性和健壮性。

6.提供统计功能:优化后的代码增加了统计胜负次数的功能,可以直观展示玩家和计算机的对战情况,增加了游戏的完整性和趣味性。

优化后代码

点击查看代码
#include<stdio.h>   
#include<stdlib.h> 
#include<time.h>   
 
int human;  // 玩家出的手势
int comp;   // 计算机出的手势
int win_no; // 胜利次数
int lose_no; // 失败次数
int draw_no; // 平局次数
char* hd[] = { "石头","剪刀","布" };  // 定义手势字符串数组
 
void initialize()  // 初始化函数
{
    win_no = 0;
    lose_no = 0;
    draw_no = 0;
    srand((unsigned int)time(NULL));  // 使用当前时间作为随机种子
    printf("猜拳游戏开始了!");  // 输出游戏开始信息
}
 
void jyanken()  // 运行猜拳游戏函数(读取/生成手势)
{
    int i;
    comp = rand() % 3;  // 生成计算机的手势
 
    do
    {
        printf("\n\a石头剪刀布");  // 输出提示信息
        for (int i = 0; i < 3; i++)
        {
            printf("(%d)%s", i, hd[i]);  // 输出可选择的手势
        }
        printf(":");
        scanf("%d", &human);  // 读取玩家选择的手势
    } while (human < 0 || human > 2);  // 确保玩家输入合法
}
 
void count_no(int result)  // 更新游戏次数(胜利、失败、平局)
{
    switch (result)
    {
    case 0:
        draw_no++;
        break;
    case 1:
        lose_no++;
        break;
    case 2:
        win_no++;
        break;
    }
}
 
void disp_result(int result)  // 显示游戏结果
{
    switch (result)
    {
    case 0:
        puts("平局。");
        break;
    case 1:
        puts("你输了。");
        break;
    case 2:
        puts("你赢了。");
        break;
    }
}
 
int main()
{
    int judge;
    initialize();  // 初始化游戏
 
    do {
        jyanken();  // 运行猜拳游戏
        printf("计算机出%s,你出%s。", hd[comp], hd[human]);  // 显示计算机和玩家的手势
        judge = (human - comp + 3) % 3;  // 判断输赢
        count_no(judge);  // 更新游戏次数
        disp_result(judge);  // 显示游戏结果
    } while (win_no < 3 && lose_no < 3);  // 判断游戏是否结束
 
    printf(win_no == 3 ? "\n你赢了.\n" : "\n计算机赢了\n");  // 最终胜负结果
    printf("%d胜%d负%d平。\n", win_no, lose_no, draw_no);  // 输出胜负平局次数
 
    return 0;
}

优化后游戏运行界面

结语
通过对比原程序与二次开发后的程序,我对如何改进代码结构、增强功能、提升用户体验有了更深入的理解,从而提升了自己的代码优化能力。
同时,我也体验了模块化设计与功能划分的好处,这对于管理复杂代码、方便维护和扩展具有重要意义,在以后的编程实践中我会更加注重模块化设计。
优化后的代码应该更加注重用户体验,如友好的交互方式、清晰的提示信息等,这也是现代软件开发中至关重要的一环。
代码优化是一个持续不断的过程,我会保持对代码优化和改进的热情,不断提升自己的编程水平。
感谢这次作业给我带来的成长与启示!

标签:case,游戏,no,int,C语言,break,printf,二次开发,猜拳
From: https://www.cnblogs.com/jeonghani/p/18056373

相关文章

  • 基于图书购买系统的二次开发
    这是大一学习c++的一位同学的大作业,里面存在着诸多缺点,我对其中的一部分进行了改进,增加了一部分功能,但是还是有一些bug我至今修复不了。这是系统原本的功能。在此基础上我添加了书籍排序,查找书籍和删除书籍的功能,并且对增加书籍进行了修改。首先我先讲讲对增加书籍的修改可......
  • Python实现五子棋人机对战的二次开发
    Python实现人机对战的二次开发    在网上找到了一个使用python实现五子棋游戏,其中通过加入一个简单的AI算法实现了人机对战的功能,我觉得这个人机对战还是蛮有意思的,下面我分析一下五子棋游戏的规则、棋盘表示方法、AI算法的实现原理以及代码实现过程。最后二次开发时引入新的......
  • 基于unity和c#的障碍跑酷游戏的二次开发
    一、设计背景近年来,虚拟现实技术取得了突飞猛进的发展,为游戏行业带来了新的机遇。通过将跑酷游戏与虚拟现实技术相结合,可以为玩家提供更加真实、沉浸式的游戏体验,让玩家仿佛置身于现实世界中的跑酷场景中。现代游戏越来越注重玩家之间的互动和竞技。跑酷游戏可以设置多人在线模......
  • 基于java的彩票选号系统的二次开发
    引言:在网上看到了一个较为简易的基于java的彩票选号系统,其主要通过后台生成中奖号码,用户选择并输入号码的方式进行,界面设计较为的简陋,源代码也只实现了较为基础的功能,并存在一些问题,比如用户输入错误时的逻辑问题;故而我在源代码的基础上进行了一定的界面美化和功能的补全,以下先附......
  • 基于Struts2 MVC的人事管理系统的二次开发
    引言这系统是一个基于JavaWeb开发和Struts2框架的简单用户管理系统。主要功能包括用户的登录、注册、查看用户列表、更新用户信息、以及删除用户等操作。系统使用了MySQL数据库存储用户信息,通过DAO模式实现了数据访问逻辑的分离。通过Struts2框架,实现了前后端的交互,通过XML配置......
  • 自习室管理系统二次开发
    引言自习室是大学中非常重要的地方,自习室学习氛围比较浓,安静得只剩下奋笔疾书和键盘敲击的声音,更加适合需要备考和考研的学生。当学生们在某一时间暂时没课时,也可以到自习室进行短暂的学习。自习室作为面对全体师生都可以活动的场所,完善的自习室管理系统和相应的规章制度尤为重要......
  • 基于c++的排雷小游戏二次开发
    源代码地址https://blog.csdn.net/weixin_45906253/article/details/121237647?spm=1001.2101.3001.6650.9&utm_medium=distribute.pc_relevant.none-task-blog-2~default~BlogCommendFromBaidu~Rate-9-121237647-blog-129464051.235^v43^pc_blog_bottom_relevance_base7&......
  • C语言基础-1、逻辑类型和运算
    一、逻辑类型和运算#include<stdbool.h>之后就可以使用bool和true、falseex1:#include<stdio.h>#include<stdbool.h>intmain(){ boolb=6>5; boolt=true; printf("%d\n",t); t=2; printf("%d\n",t); printf("%d\n&q......
  • 基于清晰度优先的安卓图片压缩工具的二次开发小记。
    原程序:https://github.com/lexluthors/CompressTools-Android工具特性:这是和微信压缩效果类似的压缩方式,采用底层压缩。尽量无损压缩图片,保持清晰度最优。可以对比原生方法bitmap.compress(CompressFormat.JPEG,quality,fileOutputStream);占用内存少,支持压缩生成原图分......
  • C++ 职工信息管理系统项目的二次开发 2252423 ywx
    来源:同学大二下的期末大作业:网上购书系统项目。运行环境:VisualStudio2022①项目结构:②运行结果截图:主菜单界面:功能选择界面:工资总额输出界面:平均工资输出界面:显示输出界面:增加正式员工界面:增加临时员工界面:修改数据界面:③主要问题:查询功能未完善,有时会出现......