智力猜字游戏
《面向对象》实训2------智力猜字游戏
(学号尾号为单数的完成)
游戏规则简介:
由计算机在0-9,这10个数字中,选取4个数字组成序列,数字不能重复。由玩家来猜测这四个数字所在的位置并输入,如果位置和数字都正确,则X+1,如果仅仅是数字正确,位置不正确,则Y+1。玩家根据X、Y的值进行
,再次输入数字,系统根据玩家输入的数字再次给出XY的值。玩家再次根据XY的值进行猜测,直到把四个数字的位置和数字都猜对。即X=4,Y=0。游戏结束。
游戏运行演示界面如下:
系统功能分析
1
本系统由以下几个功能模块(方法)构成:
显示模块(方法):显示指定(已知)数组中的元素。
校验模块(方法):验证指定(已知)数组的合法性,数组中的数据是否有重复,是否有超出0-9范围的数据,
选号模块(方法):将输入的整数存入数组a1,并将a1作为本模块(方法)的结果。 随机数产生模块(方法):产生随机数存入数组b1,并将b1作为本模块(方法)的结果。 比对模块(方法):将选号模块得到的数组a1与随机数产生模块得到的数组b1进行比对,看有多少个数组元素是相同的,如果元素值相同且位置也相同,则X+1,否则Y+1
实验目的:掌握方法(函数)的定义、调用、嵌套、递归
实验
:各个子功能模块(方法)独立实现,并能够独立测试。
主要
:方法的定义、调用。
数组的定义、使用,见下列红色内容,务必看完红色内容再开始实验,并在实验课后将下列红色部分内容抄至课堂
本上。 声明数组,然后创建数组对象的语法格式如下:
类型[ ] 数组名; 数组名,new 类型[元素个数]; //分三个步骤 或 类型[ ] 数组名,new 类型[元素个数]; 数组名={初值
}; //分两个步骤 或 类型[ ] 数组名, {初值表}; //分一个步骤
例如:创建存放6个整数的整型数组a,并将1,2,3,4 , 5, 6,几个整数放入数组a中。
int[] a; a=new[6]; a={ 1,2,3,4 , 5, 6}; //分三个步骤 或 int[] a=new int[6]; a={ 1,2,3,4 , 5, 6}; //分两个步骤 或 int[] a={ 1,2,3,4 , 5, 6}; //分一个步骤
数组长度为:数组名.length
例如 已知数组 int[] a={ 4,5,3,1 , 9, 8}; 则 a.length为6,即数组有6个元素,数组的长度为6
2
模块1:显示模块(方法)
模块功能:
显示指定(已知)数组中的信息。定义一个方法display,该方法的功能是将指定(已知)的数组中所有元素,逐个输出。相关的知识点:方法的定义(见PPT或上课笔记)、数组的使用、for循环的使用 分析:
方法头:方法的访问修饰符为static,该方法只是需要显示数组的元素,不需要任何结果,因此不需要返回值,即返回值类型为void,方法名称display,该方法需要显示的是指定(已知)的数组信息,即必须要知道显示的数组。因此方法参数为int[] a
方法体:
1.先使用console.writeline()语句,输出,号码为:
2.使用for循环,将已知数组a的各个元素取出,将其输出。
3. 使用console.writeline()语句,换行
模块1(方法)的测试:
在完成了方法display的基础上,在main()函数中,定义一个数组int[] ceshi={9,8,7,6,5,4};
然后调用display方法,将数组ceshi的元素输出。
测试结果如图:
测试1,当ceshi={9,8,7,6,5,4}时,输出
测试完成后,将mian()函数中的测试语句删除。
3
模块2,校验模块(方法)
模块功能:验证指定(已知)数组的合法性,数组中的数据是否有重复,是否有超出0-9范围的数据,如果数组合法,则返回true,否则返回false
相关的知识点:方法的定义(见PPT或上课笔记)
方法的大概流程如图:
已知数组a, int i=0;
Result=true;
否
i
9)
return false;
}
return true;
}
static int[] selectnumber()
{
int[] a = new int[4];
11
while (true)
{
Console.WriteLine("请输入四个数字,用空格分开:");
string s1 = Console.ReadLine();
string[] b = s1.Split(' ');
for (int i = 0; i < a.Length; i++)
{
a[i] = int.Parse(b[i]);
}
if (check(a))
return a;
else
Console.WriteLine("输入不合法,请重新输入~");
}
}
static int[] randomnumber()
{
Random r1 = new Random();
int[] a1 = new int[4];
while (true)
12
{
for (int i = 0; i < a1.Length; i++)
{
a1[i] = r1.Next(0, 10);
}
if (check(a1))
break;
}
Console.WriteLine("随机数已经生成~");
return a1;
}
static void openlottery()
{
int[] a1;
int[] a2;
a1 = randomnumber();
int x = 0, y = 0, num = 0;
display(a1);
while (x != 4)
{
a2 = selectnumber();
13
num++;
x = 0;
y = 0;
for (int i = 0; i < 4; i++)
{
for (int j = 0; j < 4; j++)
{
if (a1[i] == a2[j])
{
if (i == j)
x++;
else
y++;
}
if (x == 4)
break;
}
}
Console.WriteLine("x={0},y={1}", x, y);
if (x == 4)
14
{
Console.WriteLine("恭喜你,猜对了~游戏结束~
猜了{0}次~", num);
break;
}
if (num == 10)
{
Console.WriteLine("猜了十次都不对,游戏结
束~");
break;
}
}
}
主函数调用:
openlottery();
Console.ReadLine();
15