//以下代码均出自于清华大学出版社(郭克华老师版java教材)的第二十五章练习章节
//以下为自己的对代码的理解和记录
一、网络打字小游戏
网络打字小游戏需要实现的功能:
运行服务器端,之后运行客户端,可实现多个用户随机进入和退出,进入之后出现登录界面,输入用户名,若连接成功,显示连接成功界面。之后进入游戏界面。
游戏规则为26个大写字母从上端每0.1秒向下坠落,从键盘键入此字母,若正确则自己加一分,其余在线用户减一分,若输入错误或者错过输入时间,则自己减一分。
二、分析
大致思路:建立三个.java。客户端、服务器端、游戏面板类。
服务器端:
(1).首先每个客户进入服务器的时间是不可以确定的,所以需要一个总的线程来等待每个客户的连入。
(2).同时,每个客户对服务器的输入输出也是一个线程的问题,所以还需要为每一个客户创建一个线程。为了方便操作,我们同时申请一个
变长数组来保存每个连入服务器的客户端。
(3).并且,客户端之间的通信也是通过这个变长的数组来实现的。
于是就形成了,当一个客户成功连入服务器之后,服务器在总的线程上为此用户创建一个子线程,也就是2中的线程数组。此子线程中,需要实现客户端与服务器的通信,所以将总线程接收的套接字给子线程,并实现输入输出流的连接。也就是说,当一个客户需要与另一个客户实现通信时,都需要通过主线程的套接字来实现,这样更加的方便。
游戏界面端:
此界面需要考虑的方面是游戏界面的形成(字母的下落以及键盘的键入)和生命值的修改(自己的修改以及自身行为对其他用户生命值的影响)以及判断结束的函数。
(1)游戏界面上关于字母随机的从顶上下落,于是将字符设置成Label的形式,设置下落的起始位置的函数为:
setBounds(rnd.nextInt(this.getWidth()),0, 20, 20);//此函数是起始位置是横坐标随机,纵坐标从0,组件大小为20,20。
之后利用Timer类结合ActionListener的操作函数来实现含字母的移动标签随着时间的推移下落。同时利用Key监听器来实现判断是否操作正确。
(2)在实现移动时,首先判断用户是否已经错过此字母,若错过,则自己减1。当键入时,如果匹配,则自己加2,给服务器减一(服务器将会使得所有子线程用户减1,则此用户正确是加1),否则自己减1。且为了接收服务器给的其他用户的-1,则需要创建线程,因为随时可能有-1的时候。
(3)判断游