Monster Card Game的设计与实现之客户端篇

客户端

ClientTest类:负责和服务器进行通信,建立两个线程,分别发送和接收客户端发出的命令和接收服务器端发出的命令。

ClientTest3.java

package game;

import java.io.*;
import java.net.*;
public class ClientTest3{
    public static void main(String[] args){
        try{
            //链接sever端
            Socket s1 = new Socket("127.0.0.1",10004);
            System.out.println("Link in succeed...");
            System.out.println("Term 1:");
            //实例化输入流
            InputStream is = s1.getInputStream();
            DataInputStream dis = new DataInputStream(is);
            //实例化输出流
            OutputStream os = s1.getOutputStream();
            DataOutputStream dos = new DataOutputStream(os);
            //实例化两个进程
            Thread mcr = new MyClientReader(dis);
            Thread mcw = new MyClientWriter(dos);
            //启动两个进程
            mcr.start();
            mcw.start();
            //捕获异常
        }catch(SocketException e){
            System.out.println(e);
        }catch(IOException e){
            System.out.println(e);
        }
    }
}
//创建一个进程用来进行接收读取数据
class MyClientReader extends Thread{
    private DataInputStream dis;
    public MyClientReader(DataInputStream dis){
        this.dis = dis;
    }
    @Override
    public void run(){
        String msg;
        try{
            while(true){
            msg = dis.readUTF();
            System.out.println(msg);
            if(msg.equals("bye")){
                System.out.println("对方下线,程序退出");
                System.exit(0);
            }
        }
        }catch(IOException e){
            System.out.println(e);
        }
    }
}
//创建一个进程用来写入并发送数据
class MyClientWriter extends Thread{
    private DataOutputStream dos;
    public MyClientWriter(DataOutputStream dos){
        this.dos = dos;
    }
    @Override
    public void run(){
        InputStreamReader isr = new InputStreamReader(System.in);
        BufferedReader br = new BufferedReader(isr);
        String msg;
        try{
        while(true){
            msg = br.readLine();
            dos.writeUTF(msg);
            if(msg.equals("bye")){
                System.out.println("自己下线,程序退出");
                System.exit(0);
            }
        }
        }catch(IOException e){
            System.out.println(e);
        }
    }
}
时间: 2024-10-15 21:43:11

Monster Card Game的设计与实现之客户端篇的相关文章

Monster Card Game的设计与实现之框架篇

事实上,Monster Card Game并没有完全实现,或者说并没有完全实现需求分析要求所实现的功能.即使是那些实现的部分,看过一个本科生写的关于Java SE的专栏后,还是感觉自己的程序弱爆了,简直可以称得上是漏洞百出.革命尚未成功,程序仍有待完善啊^-^.但谁又能说这不是一个进步的过程呢?看那些蹒跚学步的小孩,谁又能想到日后的破坏力呢.所以,好的开始总是值得窃喜的,哈哈哈... 由于需求不是很明确,再加上时间比较急,所以还没有好好设计好就开始写程序,所以,免不了一次又一次的修改,推倒重来.

Monster Card Game的设计与实现之服务器篇

服务器端大概有这么几个类: MonsterCard类:定义卡牌的属性 Deck类:用来生产一堆卡牌,在这个游戏中共40张怪兽卡牌. Player类:用来定义一个玩家,这个玩家具有40张怪兽卡牌和8000滴血,然后根据玩家的对战情况进行减少卡牌或扣除学的操作. MyServerReader类:建立一个线程,根据对方玩家发来的的命令来对自己或对方玩家的怪兽卡牌进行操作 MyServerWriter类:建立一个线程,根据自己发出的的命令来对自己或对方玩家的怪兽卡牌进行操作 ServerTest类:负责

《新浪微博自动评论软件·设计与实现之UI篇》

任务:编写用户界面 使用Python中的wxPython对界面进行编写工作 预计的按钮有:登录,评论,退出 预计的输入框有:cookie.评论内容.搜索关键字 预计的单选框有:是否使用关键字搜索 首先,看看我们需要的控件都有哪些,按钮(Button).单选按钮(RadioButton).静态文本(StaticText).可编辑文本(TextCtrl),到WxPythonInAction查看对应的文档,要注意到的是,wxPython和之前玩的MFC不一样,不是先设计界面,再编写代码,而是所有控件的

MMORGP大型游戏设计与开发(客户端架构 part1 of vegine)

重写有些核心接口的时候,其实遇到了许多的问题,甚至一度的想过要放弃,但是最终还是坚持了下来.在客户端提供的这些接口中,可以清晰的看到客户端所依赖的各种模块的支持,以及各自之间的一些关联.下面只是介绍了vengine(微引擎)接口的基础模块框架,所谓的接口即对象设计中常见的Interface,为一个框架提供了清晰的规范支持. VEGINE FRAMEWORK 功能实现 该接口已全部实现,具体的实例只需要继承接口封装即可.上图只为简单的模块介绍,其实每个接口都有每个接口其特别的用处,这一点会在接下的

MMORGP大型游戏设计与开发(客户端架构)

首先为所有等待的朋友说一声歉意,实在让大家等的太久.客户端的设计本来就是一个大的工程,而且工作的关系,也没有太多时间在这方面做研究.不过在私下有空的时间,我还是继续着这方面的研究,很遗憾没有用期望的ogre+cegui最新的版本作为开发,这方面原因是新的版本资料实在不多,对于没有什么经验的人来说实在是一大难事,所以最终选择了同天龙八部/武侠世界版本接近的源码作为开发.好了,废话不多说,今天好介绍的是客户端的基本构架,天龙八部/武侠世界的设计模式. CLIENT 功能实现 本次功能实现了vengi

GUI设计9个原则(第二篇)

基本原则4: 设计要符合常见情况 基本原别5: 不要分散用户对他们目标的注意力 基本原则6: 促进学习 4)原则4:设计要符合常见情况 在任何任务领域中,用户都有各种目标,从常用目标到很少发生的目标.应用程序应当设计为能够识别这些目标. 4.1 使得易于实现常用的结果 如果用户的目标是可预测的且常用的,用户就不应为了实现这个目标而必须做很多工作.如果目标是不常见的,则可以要求做更多工作.更正式的说法是: 为了得到一个想要的结果,用户必须要指定的量不应与结果的复杂度成比例.它应当与期望结果偏离常用

MMORGP大型游戏设计与开发(客户端架构 part14 of vegine)

渲染在客户端中具有着至关重要的地位,试想我们玩游戏的第一感觉是什么就会明白了,良好的画面效果对客户端来说是多么的迫切.没有学习过opengl或是direct3d这些渲染API的朋友们也不必担心,而学习过这些接口的朋友们现在可以安心了,没有必要为了一个小小的渲染弄的头疼.因为渲染引擎可以帮你解决大部分你所能想到的渲染效果,这也正是渲染引擎所诞生的直接原因,那就是为了便利. CODE /** * PAP Engine ( -- ) * $Id system.h * @link-- for the c

MMORGP大型游戏设计与开发(客户端架构 part6 of vegine)

客户端的变量模块部分主要是将一些常用可变的值集中管理,如窗口的大小,是否开启音乐,音量的大小等等.这些变量通常会应该到客户端的操作,一般来说变量改变的时候会调用一个回调进行处理.下面我们就看看该模块的常用方法吧. CODE 文件system.h /** * PAP Engine ( -- ) * $Id system.h * @link -- for the canonical source repository * @copyright Copyright (c) 2013-2014 viti

MMORGP大型游戏设计与开发(客户端架构 part4 of vegine)

昨天是七夕,祝大家都过的快乐,希望这句迟到的问候不会造成大家心中的困扰.这一节讲到了前端比较重要的模块,性能以及调试异常模块.一个应用的性能往往是最核心的部分,就像人身体的各个器官一样,一小部分也不能马虎,否则你得到的只是你想象不到的苦果.在这里,我们封装了性能采集,调试输出.变量打印,以及异常收集.希望大家会对这方面有所了解与进步. 结构 CODE ax模块,文件profile.h /** * PAP Engine ( -- ) * $Id profile.h * @link -- for t