java斗地主发牌程序

java斗地主发牌程序,第1张

DeckOfCards()构造函数里面,注释掉的

//deck[count]=new Card(faces[count%13],suits[count/13])

是对的,下面那行除17是错的

另外,没有把大小王赋值到数组里

最后main函数里,打印方法错了。应该为,原本少了一个%-20s

System.out.printf("%-20s%-20s%-20s\n", myDeckOfCards.dealCard(), myDeckOfCards.dealCard(), myDeckOfCards.dealCard())

发牌完成以后剩下的3张牌就是保留的底牌

客户端:

import java.io.*

import java.net.*

import java.awt.*

import java.awt.event.*

public class ChatClient extends Frame

{

TextArea ta = new TextArea()

TextField tf = new TextField()

public void launchFrame() throws Exception

{

this.add(ta, BorderLayout.CENTER)

this.add(tf, BorderLayout.SOUTH)

tf.addActionListener(

new ActionListener()

{

public void actionPerformed(ActionEvent ae)

{

try {

String sSend = tf.getText()

if(sSend.trim().length() == 0) return

ChatClient.this.send(sSend)

tf.setText("")

ta.append(sSend + "\n")

}

catch (Exception e)

}

}

)

this.addWindowListener(

new WindowAdapter()

{

public void windowClosing(WindowEvent e)

{

System.exit(0)

}

}

)

setBounds(300,300,300,400)

setVisible(true)

tf.requestFocus()

}

Socket s = null

public ChatClient() throws Exception

{

s = new Socket("127.0.0.1", 8888)

launchFrame()

(new Thread(new ReceiveThread())).start()

}

public void send(String str) throws Exception

{

DataOutputStream dos = new DataOutputStream(s.getOutputStream())

dos.writeUTF(str)

}

public void disconnect() throws Exception

{

s.close()

}

public static void main(String[] args) throws Exception

{

BufferedReader br = new BufferedReader (

new InputStreamReader(System.in))

ChatClient cc = new ChatClient()

String str = br.readLine()

while(str != null &&str.length() != 0)

{

cc.send(str)

str = br.readLine()

}

cc.disconnect()

}

class ReceiveThread implements Runnable

{

public void run()

{

if(s == null) return

try {

DataInputStream dis = new DataInputStream(s.getInputStream())

String str = dis.readUTF()

while (str != null &&str.length() != 0)

{

//System.out.println(str)

ChatClient.this.ta.append(str + "\n")

str = dis.readUTF()

}

}

catch (Exception e)

{

e.printStackTrace()

}

}

}

}

服务器:

import java.net.*

import java.util.*

import java.io.*

import java.awt.*

import java.awt.event.*

public class ChatServer extends Frame

{

TextArea ta = new TextArea()

public void launchFrame()

{

add(ta, BorderLayout.CENTER)

setBounds(0,0,200,300)

this.addWindowListener(

new WindowAdapter()

{

public void windowClosing(WindowEvent e)

{

System.exit(0)

}

}

)

setVisible(true)

}

ServerSocket server = null

Collection cClient = new ArrayList()

public ChatServer(int port) throws Exception

{

server = new ServerSocket(port)

launchFrame()

}

public void startServer() throws Exception

{

while(true)

{

Socket s = server.accept()

cClient.add( new ClientConn(s) )

ta.append("NEW-CLIENT " + s.getInetAddress() + ":" + s.getPort())

ta.append("\n" + "CLIENTS-COUNT: " + cClient.size() + "\n\n")

}

}

class ClientConn implements Runnable

{

Socket s = null

public ClientConn(Socket s)

{

this.s = s

(new Thread(this)).start()

}

public void send(String str) throws IOException

{

DataOutputStream dos = new DataOutputStream(s.getOutputStream())

dos.writeUTF(str)

}

public void dispose()

{

try {

if (s != null) s.close()

cClient.remove(this)

ta.append("A client out! \n")

ta.append("CLIENT-COUNT: " + cClient.size() + "\n\n")

}

catch (Exception e)

{

e.printStackTrace()

}

}

public void run()

{

try {

DataInputStream dis = new DataInputStream(s.getInputStream())

String str = dis.readUTF()

while(str != null &&str.length() !=0)

{

System.out.println(str)

for(Iterator it = cClient.iterator()it.hasNext())

{

ClientConn cc = (ClientConn)it.next()

if(this != cc)

{

cc.send(str)

}

}

str = dis.readUTF()

//send(str)

}

this.dispose()

}

catch (Exception e)

{

System.out.println("client quit")

this.dispose()

}

}

}

public static void main(String[] args) throws Exception

{

ChatServer cs = new ChatServer(8888)

cs.startServer()

}

}

(来自BJSXT)

最简单的方法,在每个牌对象加一个属性,专门用来排序这个属性是全局变量,写一个静态方法,这个方法用于返回当前数字,并自增1,如果需要多线程,注意加锁,牌的构造函数调用一次静态方法获取一个数值。在牌对象中写一个专门用于比较两个牌对象的方法,返回-1和1即可,-1表示前面的大,1表示前面的小,其实这种方法有些集合是有自带类似的


欢迎分享,转载请注明来源:内存溢出

原文地址: http://outofmemory.cn/yw/8131207.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2023-04-13
下一篇 2023-04-13

发表评论

登录后才能评论

评论列表(0条)

保存