上帝掷骰子吗 txt游戏,请问代码哪里错了?找了好久都找不出来😭

2015年3月 总版技术专家分月排行榜第二2014年12月 总版技术专家分月排行榜第二2014年9月 总版技术专家分月排行榜第二
2015年3月 .NET技术大版内专家分月排行榜第一2015年2月 .NET技术大版内专家分月排行榜第一2015年1月 .NET技术大版内专家分月排行榜第一2014年12月 .NET技术大版内专家分月排行榜第一2014年11月 .NET技术大版内专家分月排行榜第一
2013年4月 总版技术专家分月排行榜第一2013年3月 总版技术专家分月排行榜第一
2013年4月 .NET技术大版内专家分月排行榜第一2013年3月 .NET技术大版内专家分月排行榜第一
匿名用户不能发表回复!|
每天回帖即可获得10分可用分!小技巧:
你还可以输入10000个字符
(Ctrl+Enter)
请遵守CSDN,不得违反国家法律法规。
转载文章请注明出自“CSDN(www.csdn.net)”。如是商业用途请联系原作者。频道推荐文章
频道本月排行
随机推荐文章
Copyright (C) 2006 - 2016
All Rights Reserved目前只实现了一个人的客户端,由服务端进行判断输赢,返回结果!人数,可以自行增加!
我使用多线程的方式,即每次押注都会通知服务器端新开线程,在参与人数比较少的情况下,不会又问题!但是如果参与人数比较多,由于我的基准值,也就是初始金钱值使用的是同一个静态变量,必然有可能会造成金钱变化的不及时,并且,所有人用的也都是同一个金钱值,当然也不太合理!
还有许多控件的功能并没有完全实现!
总算是完成了自己的第一个GUI程序吧!
java 的学习至此也要告一段落了,下一阶段该学什么呢?//客户端
import java.awt.*;
import java.awt.event.*;
public class ClientGame extends Frame implements WindowListener{
public TextA
public ClientGame(){
super(&骰子游戏客户端&);
MenuUI bar=new MenuUI(this);//设置框架菜单栏
//注册时间监听//第一个this表示自己,给自己注册监听器,是谁,还是自己(第二个this)
//注册监听器的意思就是说,被监听对象有动作时,自动执行监听器的对应函数
this.addWindowListener(this);
//设置主界面
this.setSize(400,400);
this.setVisible(true);
private void initUI(){
//初始化上部
Panel pNorth=initNorth();
this.add(pNorth,BorderLayout.NORTH);
//初始化右侧
Panel pEast=initEast();
this.add(pEast, BorderLayout.EAST);
//初始化中部
Panel pCenter=initCenter();
this.add(pCenter, BorderLayout.CENTER);
//初始化上部函数,返回上部面板
private Panel initNorth(){
Panel p=new Panel();//新建一个面板对象
//设置布局管理器
BorderLayout b1=new BorderLayout();
p.setLayout(b1);
//创建控件
Label lbTitle=new Label(&欢迎加入骰子大战&);
//添加一个多行文本空间
ta=new TextArea();//换成类属性,这个每个版块都可以调用了
ta.append(&系统提示信息:\n&);
ta.append(&初始金钱:1000\n&);
//设置不可编辑
ta.setEditable(false);
//添加到容器
p.add(lbTitle,BorderLayout.NORTH);
p.add(ta,BorderLayout.CENTER);
//设置背景色
p.setBackground(Color.GRAY);
//初始化右侧函数,返回右侧面板
private Panel initEast(){
Panel p=new Panel();
//设置布局管理器为边界式
BorderLayout bl=new BorderLayout();
p.setLayout(bl);
//创建控件
Label lbTitle=new Label(&当前在线:&);
List listUser=new List();
listUser.add(&所有人&);
listUser.add(&Tom&);
listUser.add(&Mike&);
//添加控件到容器
p.add(lbTitle, BorderLayout.NORTH);
p.add(listUser,BorderLayout.CENTER);
//设置背景色
p.setBackground(Color.CYAN);
//初始化中部函数,返回中部面板
private Panel initCenter(){
Panel p=new Panel();
//设置布局管理器
GridLayout gl=new GridLayout(4,4);
p.setLayout(gl);
//创建控件对象,并依次添加
String[] content={
&回显功能&,&200&,&192.168.1.108&,&Txt3&,
&回显功能&,&Label1&,&Label2&,&Label3&,
&Label4&,&Label5&,&Label6&,&Label7&,
&压大&,&压小&,&聊天&,&Button3&,
//为了方便调用标签组件,构造Label组件放在构造txt前面
Label[] DicNum=new Label[8];
for(int i=4;i&12;i++,j++){
DicNum[j]=new Label(content[i]);
p.add(DicNum[j]);
//构造Txt组件
TextField[] userIP=new TextField[4];
for(int i=0;i&4;i++){
userIP[i]=new TextField(content[i]);
p.add(userIP[i]);
//注册Text0的监视器,这里实际是userIP[0]
TextToLabel ttl=new TextToLabel(userIP[0],DicNum[0],ta);//将事件源文本框传过去
userIP[0].addActionListener(ttl);
//构造 button组件
Button[] btn=new Button[4];//这里仅仅只是声明,还不算初始化
for(int i=12;i&16;i++,j++){
btn[j]=new Button(content[i]);
p.add(btn[j]);
//为压大和压小按钮注册监听器,将文本框1都传过去,按钮和多行文本控件也要传过去
//文本框1押注金额0-3,传递的参数:文本框1:输押注金额,文本框2:输ip,
//按钮:压大小,多行文本:显示提示
DicGame dg=new DicGame(userIP[1],userIP[2],btn[0],btn[1],ta);
btn[0].addActionListener(dg);
btn[1].addActionListener(dg);
btn[2].addActionListener(dg);
public static void main(String[] args) {
// TODO 自动生成的方法存根
ClientGame ss=new ClientGame();
public void windowActivated(WindowEvent arg0) {
// TODO 自动生成的方法存根
public void windowClosed(WindowEvent arg0) {
// TODO 自动生成的方法存根
public void windowClosing(WindowEvent arg0) {
// TODO 自动生成的方法存根
System.exit(0);
public void windowDeactivated(WindowEvent arg0) {
// TODO 自动生成的方法存根
public void windowDeiconified(WindowEvent arg0) {
// TODO 自动生成的方法存根
public void windowIconified(WindowEvent arg0) {
// TODO 自动生成的方法存根
public void windowOpened(WindowEvent arg0) {
// TODO 自动生成的方法存根
import java.awt.*;
import java.util.*;
import java.awt.event.*;
import java.io.*;
import java.net.*;
public class DicGame implements ActionListener {
Label lab1;
TextField txt1,txt2;//txt1用于押注金额,txt2用于输入ip
Button btn0,btn1,btn2;
static int money=1000;//初始金额
public DicGame(TextField txt1,TextField txt2,Button btn0,Button btn1,TextArea ta){
this.txt1=txt1;
this.txt2=txt2;
this.btn0=btn0;
this.btn1=btn1;
this.btn2=btn2;
public void actionPerformed(ActionEvent e) {
// TODO 自动生成的方法存根
Socket socket=//客户端 声明网络连接对象
InputStream is=
OutputStream os=
//服务器端IP地址在txt2中,通过函数来得到
String serverIP=addIP(txt2);
//服务器端口号
int port=10000;
//发送内容就限定为byte型的0和1,压大是1,压小是0
//两个按钮注册的是同一个监听对象,就需要得到事件源,判断是哪个按钮事件
String data=
Button b=(Button)e.getSource();
if(b==btn0)
data=&1&;//压大
else if(b==btn1)
data=&0&;//压小
//获得押注金额,txt1内容转换为字符串
String stake=txt1.getText();
//将多个String连接成一个字符串,大小和押注金额
String sdata=linkData(data,stake);
showLabel(sdata);
//建立连接
socket=new Socket(serverIP,port);
//发送数据
//就简单理解为,此操作后,os就是连接输出流,输出内容写入到输出流os中即可
os=socket.getOutputStream();//得到网络连接的输出流
os.write(sdata.getBytes());
//接受数据
is=socket.getInputStream();//同上理解,得到连接输入流
byte[]d=new byte[1024];
int n=is.read(d);
//输出反馈数据
String s=new String(d,0,n);//反馈数据即为此s字符串
showLabel(s);
//解析s字符串,并输出结果
showResult(s);
}catch(Exception e1){
e1.printStackTrace();
//关闭流和连接
is.close();
os.close();
socket.close();
}catch(Exception e2){}
String addIP(TextField txt2){
return txt2.getText();//这里对IP地址的非法情况不做判断,由连接异常来反应
//将发送数据都整合到一个字符串里面
String linkData(String str1,String str2){
//StringBuffer sb=new StringBuffer(str1);
//sb.append(str2);
return str1+& &+str2;//String本来就重载了+,可以直接使用
//反馈数据解析并显示函数
void showResult(String s){
StringTokenizer an=new StringTokenizer(s,& &);//空格作为分隔依据
String str1=an.nextToken();
String str2=an.nextToken();//我这种简单的网络协议就不需要用循环了
//数据解析完成后显示
showLabel(str1);showLabel(&显示么?&);
if(str1==&0&){
showLabel(&输&);
showLabel(&赢&);
showLabel(&剩余金钱:&);
showLabel(str2);
//将字符串在多行文本上显示
public void showLabel(String s){
ta.append(s+'\n');
import java.awt.*;
import java.awt.event.*;
import javax.swing.JOptionP
public class MenuUI implements ActionListener {
MenuItem versionMi;
MenuItem authorMi;
public MenuUI(Frame frm){
this.frm=//传递框架对象,不然弹出对话框的时候,找不到依赖对话框
MenuBar bar=new MenuBar();//创建菜单栏
//创建菜单
Menu fileMenu=new Menu(&文件&);
Menu helpMenu=new Menu(&帮助&);
Menu aboutMenu=new Menu(&关于&);
//创建菜单项
MenuItem openMi=new MenuItem(&打开&);
MenuItem printMi=new MenuItem(&打印&);
MenuItem exitMi=new MenuItem(&退出&);
MenuItem helpMi=new MenuItem(&帮助&);
versionMi=new MenuItem(&版本&);
authorMi=new MenuItem(&作者&);
//添加到菜单
fileMenu.add(openMi);
fileMenu.add(printMi);
fileMenu.add(exitMi);
aboutMenu.add(versionMi);
aboutMenu.add(authorMi);
helpMenu.add(helpMi);
helpMenu.add(aboutMenu);
//添加到菜单栏
bar.add(fileMenu);
bar.add(helpMenu);
//设置菜单栏
frm.setMenuBar(bar);
//注册同一个监听器,方法内部判断发生事件的菜单项,然后进行不同的逻辑处理
versionMi.addActionListener(this);
authorMi.addActionListener(this);
public void actionPerformed(ActionEvent e){
//获得发生事件的控件
MenuItem mi=(MenuItem)e.getSource();
//判断,弹出有模式对话框
if(mi==versionMi){
JOptionPane.showMessageDialog(frm, &v1.2\n单机掷骰子&,&版本&, RMATION_MESSAGE);
else if(mi==authorMi){
JOptionPane.showMessageDialog(frm, &Andy\n座右铭:勤耕不辍,方得始终!&,&作者&, RMATION_MESSAGE);
import java.awt.*;
import java.awt.event.*;
public class TextToLabel implements ActionListener {
TextField txt1;
Label Lab1;
//构造方法要将事件源文本框传过来
public TextToLabel(TextField txt1,Label Lab1,TextArea ta){
this.txt1=txt1;
this.Lab1=Lab1;
public void actionPerformed(ActionEvent e) {
// TODO 自动生成的方法存根
String word=txt1.getText();//获得输入文本
Lab1.setText(word);
ta.append(word+'\n');
System.out.println(word);
//*********************************************************
//服务器端
import java.awt.*;
import java.awt.event.*;
public class DicGame implements ActionListener {
Label lab1;
TextField txt2;
Button btn0,btn1;
static int money=1000;//初始金额
public DicGame(TextField txt2,Label lab1,Button btn0,Button btn1,TextArea ta){
this.lab1=lab1;
this.txt2=txt2;
this.btn0=btn0;
this.btn1=btn1;
public void actionPerformed(ActionEvent e) {
// TODO 自动生成的方法存根
//showLabel(changeChar(money),ta);//显示初始金额
int diceNum=0;
int type=0;
//判断押宝类型
//获得按钮对象
Button b=(Button)e.getSource();
if(b==btn0)
type=1;//1压大
else if(b==btn1)
type=2;//2压小
int cMoney=changeInt();
//游戏过程,应该是不需要死循环的
//输入非法,则程序直接完成了,GUI线程本身是死循环了,输入正确执行else
if(!checkCMoney(money,cMoney)){
showLabel(&输入非法&,ta);
//输入有效后,开始掷骰子
diceNum=doDice();//掷骰子
//判断胜负
success=isSuccess(type,diceNum);
//金钱变化
money=changeMoney(money,success,cMoney);
//游戏结束
if(money&=0){
showLabel(&请充值!&,ta);
//定义一个将整形转换为字符串的函数
public String changeChar(int i){
return Integer.toString(i);
//将字符串在多行文本上显示
public void showLabel(String s,TextArea ta){
ta.append(s+'\n');
//将文本框获得内容转为整形数
public int changeInt(){
String s=txt2.getText();
return Integer.parseInt(s);
//判定下注金额是否非法
public static boolean checkCMoney(int money,int cMoney){
if(cMoney&=0)
else if(cMoney&=money)
//掷骰子,返回点数和
public static int doDice(){
int n=(int)(Math.random()*6)+1;
int n1=(int)(Math.random()*6)+1;
int n2=(int)(Math.random()*6)+1;
return n+n1+n2;
//胜负判断
boolean isSuccess(int type,int diceNum){
//计算庄家类型
int bankerType=0;
if(diceNum&=9){
bankerType=2;
bankerType=1;
if(bankerType==type){
showLabel(&赢&,ta);
showLabel(&输&,ta);
//金钱变化
public int changeMoney(int money,boolean success,int cMoney){
if(success){
showLabel(&当前金钱:&,ta);
showLabel(changeChar(money),ta);
import java.awt.*;
import java.io.*;
import java.net.*;
import java.util.*;
public class LogicThread extends Thread {
int dicNum,result,nowM//返回结果为result nowMoney
public LogicThread(Socket socket,TextArea ta){
this.socket=
public void run(){
byte[]b=new byte[1024];
//得到连接中的输入输出流
os=socket.getOutputStream();
is=socket.getInputStream();
//读取数据
int n=is.read(b);
//逻辑处理
String str=sHandle(b,n);//n代表实际读取字节数
//发送str内容
os.write(str.getBytes());
ta.append(&&&&&&&&&&);
ta.append(str);
System.out.println(&&*&*&*线程到这里就该结束了&);
}catch(Exception e){
e.printStackTrace();
//关闭流和连接
private void close(){
//关闭流和连接
System.out.println(&&*&*&*&*&*&);
os.close();
is.close();
socket.close();
}catch(Exception e){}
//逻辑处理函数
String sHandle(byte[] b,int n){
//首先要将b数组解析出来
String str=new String(b,0,n);//将字节数组转换为字符串
ta.append(str+'\n');
StringTokenizer ad=new StringTokenizer(str,& &);//空格分隔
String str1=ad.nextToken();//实际则代表了客户端发来的压大小信息
String str2=ad.nextToken();//代表客户所押金额
ta.append(&********&);
ta.append(str1+'\n');
ta.append(str2+'\n');
//判断客户所押为大还是小,并得到押注金额,将字符串转变为整型数
int type=Integer.parseInt(str1);
int cMoney=Integer.parseInt(str2);
System.out.println(type);
System.out.println(cMoney);
ta.append(&*********&);
//判断押注金额是否非法,调用DicGame类中的静态变量和方法
System.out.println(&静态变量金钱:&+DicGame.money);
if(!DicGame.checkCMoney(DicGame.money,cMoney)){
ta.append(&输入非法&);//将字符串在多行文本空间中显示
nowMoney=DicGame.
else{//输入有效开始判断大小
dicNum=DicGame.doDice();
//判断胜负
success=isSuccess(type,dicNum);
//金钱变化,这里金钱使用的是静态变量,但是还是值传递的方式,
//每次不管怎么变,原来的静态变量没有变,所以总是以1000为基准
nowMoney=changeMoney(DicGame.money,success,cMoney);
//游戏结束
if(nowMoney&=0)
ta.append(&请充值!\n&);
//游戏至此就已经完成,转换要返回的数据并返回
return Integer.toString(result)+& &+Integer.toString(nowMoney);
//胜负判断
boolean isSuccess(int type,int dicNum){
//计算庄家类型
int bankerType=0;
if(dicNum&=9){
bankerType=0;
bankerType=1;
if(bankerType==type){
ta.append(&赢\n&);
ta.append(&输\n&);
//金钱变化
public int changeMoney(int money,boolean success,int cMoney){
if(success){
System.out.println(&变化后的金钱:&);
System.out.println(money);
ta.append(&剩余金钱:\n&);;
//将剩余金钱转换为字符串并显示
ta.append(Integer.toString(money));
DicGame.money=//金钱变化后,要修改基准值
import java.awt.*;
import java.awt.event.*;
import javax.swing.JOptionP
public class MenuUI implements ActionListener {
MenuItem versionMi;
MenuItem authorMi;
public MenuUI(Frame frm){
this.frm=//传递框架对象,不然弹出对话框的时候,找不到依赖对话框
MenuBar bar=new MenuBar();//创建菜单栏
//创建菜单
Menu fileMenu=new Menu(&文件&);
Menu helpMenu=new Menu(&帮助&);
Menu aboutMenu=new Menu(&关于&);
//创建菜单项
MenuItem openMi=new MenuItem(&打开&);
MenuItem printMi=new MenuItem(&打印&);
MenuItem exitMi=new MenuItem(&退出&);
MenuItem helpMi=new MenuItem(&帮助&);
versionMi=new MenuItem(&版本&);
authorMi=new MenuItem(&作者&);
//添加到菜单
fileMenu.add(openMi);
fileMenu.add(printMi);
fileMenu.add(exitMi);
aboutMenu.add(versionMi);
aboutMenu.add(authorMi);
helpMenu.add(helpMi);
helpMenu.add(aboutMenu);
//添加到菜单栏
bar.add(fileMenu);
bar.add(helpMenu);
//设置菜单栏
frm.setMenuBar(bar);
//注册同一个监听器,方法内部判断发生事件的菜单项,然后进行不同的逻辑处理
versionMi.addActionListener(this);
authorMi.addActionListener(this);
public void actionPerformed(ActionEvent e){
//获得发生事件的控件
MenuItem mi=(MenuItem)e.getSource();
//判断,弹出有模式对话框
if(mi==versionMi){
JOptionPane.showMessageDialog(frm, &v1.2\n单机掷骰子&,&版本&, RMATION_MESSAGE);
else if(mi==authorMi){
JOptionPane.showMessageDialog(frm, &Andy\n座右铭:勤耕不辍,方得始终!&,&作者&, RMATION_MESSAGE);
import java.awt.*;
import java.net.*;
import java.awt.event.*;
public class ServiceGame extends Frame implements WindowListener{
static public TextA//设置为公共属性,大家都可以调用来显示提示信息
public ServiceGame(){
super(&骰子游戏服务端&);
MenuUI bar=new MenuUI(this);//设置框架菜单栏
//注册时间监听//第一个this表示自己,给自己注册监听器,是谁,还是自己(第二个this)
//注册监听器的意思就是说,被监听对象有动作时,自动执行监听器的对应函数
this.addWindowListener(this);
//设置主界面
this.setSize(400,400);
this.setVisible(true);
private void initUI(){
//初始化上部
Panel pNorth=initNorth();
this.add(pNorth,BorderLayout.NORTH);
//初始化右侧
Panel pEast=initEast();
this.add(pEast, BorderLayout.EAST);
//初始化中部
Panel pCenter=initCenter();
this.add(pCenter, BorderLayout.CENTER);
//初始化上部函数,返回上部面板
private Panel initNorth(){
Panel p=new Panel();//新建一个面板对象
//设置布局管理器
BorderLayout b1=new BorderLayout();
p.setLayout(b1);
//创建控件
Label lbTitle=new Label(&欢迎加入骰子大战&);
//添加一个多行文本空间
ta=new TextArea();//换成类属性,这个每个版块都可以调用了
ta.append(&系统提示信息:\n&);
ta.append(&初始金钱:1000\n&);
//设置不可编辑
ta.setEditable(false);
//添加到容器
p.add(lbTitle,BorderLayout.NORTH);
p.add(ta,BorderLayout.CENTER);
//设置背景色
p.setBackground(Color.GRAY);
//初始化右侧函数,返回右侧面板
private Panel initEast(){
Panel p=new Panel();
//设置布局管理器为边界式
BorderLayout bl=new BorderLayout();
p.setLayout(bl);
//创建控件
Label lbTitle=new Label(&当前在线:&);
List listUser=new List();
listUser.add(&所有人&);
listUser.add(&Tom&);
listUser.add(&Mike&);
//添加控件到容器
p.add(lbTitle, BorderLayout.NORTH);
p.add(listUser,BorderLayout.CENTER);
//设置背景色
p.setBackground(Color.CYAN);
//初始化中部函数,返回中部面板
private Panel initCenter(){
Panel p=new Panel();
//设置布局管理器
GridLayout gl=new GridLayout(4,4);
p.setLayout(gl);
//创建控件对象,并依次添加
String[] content={
&Txt1&,&Txt2&,&Txt3&,&Txt4&,
&Label1&,&Label2&,&Label3&,&Label4&,
&Label5&,&Label6&,&Label7&,&Label8&,
&压大&,&压小&,&Button3&,&Button4&,
//为了方便调用标签组件,构造Label组件放在构造txt前面
Label[] DicNum=new Label[8];
for(int i=4;i&12;i++,j++){
DicNum[j]=new Label(content[i]);
p.add(DicNum[j]);
//构造Txt组件
TextField[] userIP=new TextField[4];
for(int i=0;i&4;i++){
userIP[i]=new TextField(content[i]);
p.add(userIP[i]);
//注册Text1的监视器,这里实际是userIP[0]
TextToLabel ttl=new TextToLabel(userIP[0],DicNum[0],ta);//将事件源文本框传过去
userIP[0].addActionListener(ttl);
//构造 button组件
Button[] btn=new Button[4];//这里仅仅只是声明,还不算初始化
for(int i=12;i&16;i++,j++){
btn[j]=new Button(content[i]);
p.add(btn[j]);
//为压大和压小按钮注册监听器,将标签2,3,4和文本框1都传过去,按钮也要传过去
DicGame dg=new DicGame(userIP[1],DicNum[1],btn[0],btn[1],ta);
btn[0].addActionListener(dg);
btn[1].addActionListener(dg);
public static void main(String[] args) {
// TODO 自动生成的方法存根
ServiceGame ss=new ServiceGame();//这一步只是生成了界面
//就是说只是开启了一个线程来做界面这件事情,主函数,也就是主线程,还要往下执行
//System.out.println(&hello&);
ServerSocket serverSocket=
Socket socket=
//监听端口号
int port=10000;
//建立连接
serverSocket=new ServerSocket(port);//监听代码
ta.append(&服务器已启动\n&);
while(i&0){
//获得连接到服务器端的客户端连接,释放服务器端口,拥塞方法
socket=serverSocket.accept();
//启动线程
System.out.println(&线程开始&);
LogicThread tt=new LogicThread(socket,ta);
System.out.println(&第&+i+&次循环&);
System.out.println(&线程结束了!&);
}catch(Exception e){
e.printStackTrace();
//关闭连接
serverSocket.close();
}catch(Exception e){}
public void windowActivated(WindowEvent arg0) {
// TODO 自动生成的方法存根
public void windowClosed(WindowEvent arg0) {
// TODO 自动生成的方法存根
public void windowClosing(WindowEvent arg0) {
// TODO 自动生成的方法存根
System.exit(0);
public void windowDeactivated(WindowEvent arg0) {
// TODO 自动生成的方法存根
public void windowDeiconified(WindowEvent arg0) {
// TODO 自动生成的方法存根
public void windowIconified(WindowEvent arg0) {
// TODO 自动生成的方法存根
public void windowOpened(WindowEvent arg0) {
// TODO 自动生成的方法存根
import java.awt.*;
import java.awt.event.*;
public class TextToLabel implements ActionListener {
TextField txt1;
Label Lab1;
//构造方法要将事件源文本框传过来
public TextToLabel(TextField txt1,Label Lab1,TextArea ta){
this.txt1=txt1;
this.Lab1=Lab1;
public void actionPerformed(ActionEvent e) {
// TODO 自动生成的方法存根
String word=txt1.getText();//获得输入文本
Lab1.setText(word);
ta.append(word+'\n');
System.out.println(word);
参考知识库
* 以上用户言论只代表其个人观点,不代表CSDN网站的观点或立场
访问:13658次
排名:千里之外
原创:29篇
评论:19条
(1)(2)(5)(1)(3)(17) 上传我的文档
 下载
 收藏
该文档贡献者很忙,什么也没留下。
 下载此文档
正在努力加载中...
课程设计报告 掷骰子游戏
下载积分:1800
内容提示:【DOC】c
课程设计报告 掷骰子游戏
文档格式:DOC|
浏览次数:22|
上传日期: 05:20:52|
文档星级:
该用户还上传了这些文档
课程设计报告 掷骰子游戏
官方公共微信

我要回帖

更多关于 掷骰子游戏 的文章

 

随机推荐