JAVASE系统实现抽卡功能

本文实例为大家分享了JAVASE系统实现抽卡功能的具体代码,供大家参考,具体内容如下

先看下文件结构

使用到的知识点:

看下Client类的实现:

package SocketS;

import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStreamReader;
import java.io.OutputStream;
import java.io.PrintWriter;
import java.net.Socket;
import java.util.Scanner;

import org.apache.log4j.Logger;

import com.sun.security.ntlm.Client;

import User.Users;
import User.UsersDao;

/**
 * 客户端调用登录/注册 后绑定用户操作
 *
 * @author Administrator
 *
 */
public class Cilent {

 public static void main(String[] args) {
 try {
  Socket socket = new Socket("127.0.0.1", 11536);
  Menu(socket);
 } catch (IOException e) {
  e.printStackTrace();
 }
 }

 private static void Menu(Socket socket) throws IOException {
 Scanner sc = new Scanner(System.in);
 PrintWriter printwriter = null;
 OutputStream outputStream = null;
 BufferedReader bufferedReader = null;
 String choice;
 do {
  System.out.println("请您选择:1.老用户立即登录   2.新用户注册即玩\n" + "请输入正确的数,输入0退出系统");
  choice = sc.next();
  System.out.println(choice);
  // 先传入玩家的操作选项

  if (Integer.parseInt(choice) > 0 && Integer.parseInt(choice) < 3) {
  outputStream = socket.getOutputStream();
  byte[] by = choice.getBytes();
  outputStream.write(by, 0, by.length);
  outputStream.flush();
//  socket.shutdownOutput();
  }
  printwriter = new PrintWriter(outputStream);

  bufferedReader = new BufferedReader(new InputStreamReader(socket.getInputStream()));
  System.out.println(bufferedReader.readLine());
  switch (choice) {
  case "0":
  System.exit(0);
  break;
  case "1":
  ClientLogin(printwriter,sc);

  break;
  case "2":
  ClientRegist(printwriter);// 注册
  ClientLogin(printwriter,sc);

  break;
  }
 } while (Integer.parseInt(choice) > 3 || Integer.parseInt(choice) < 1);

 while (true) {
  //登录完成!
  //获取服务器传来的消息!
  System.out.println("请选择:1.单抽过过瘾!2.10连抽任性 0.退出");
  String choiceCards = sc.next();
  if ("0".equals(choiceCards)) {
  socket.close();
  System.exit(0);
  }

  printwriter.println(choiceCards);
  printwriter.flush();
  String str = bufferedReader.readLine();
  Logger logger = Logger.getLogger(Client.class);
  logger.info(str);
  System.out.println(str);
 }

 }

 /**
 * 客户端用户注册//注册,并将对象通过对象写出到网络流中
 *
 * @param socket
 * @throws IOException
 */
 private static void ClientRegist(PrintWriter printwriter) throws IOException {
 UsersDao uersDao = new UsersDao();
 Users u = uersDao.UserRegister();
 printwriter.println(u);
 printwriter.flush();
// socket.shutdownOutput();
 }

 private static void ClientLogin(PrintWriter printwriter,Scanner sc){
 String name = null;
 int age = 0 ;
 while (true) {
  try {
  System.out.println("请输入昵称");
  name = sc.next();
  System.out.println("请输入年龄");
  age = sc.nextInt();
  break;
  } catch (Exception e) {
  System.err.println("您的输入不合法,请重新输入");
  e.printStackTrace();
  }
 }
 String checkstr = "Name="+name+":Age="+age;

 //将字符串传入网络流后对服务器的文件进行判断
 printwriter.println(checkstr);
 printwriter.flush();
 }

}

Server端(多线程)

package SocketS;

import java.io.IOException;
import java.net.ServerSocket;
import java.net.Socket;

/**
 * 服务器   需要完成登录校验 ,注册校验 以及游戏抽卡
 * @author Administrator
 *
 */
public class Server implements Runnable {
 Socket socket = null;

 public Server(Socket socket) {
 super();
 this.socket = socket;
 }

 @Override
 public void run() {
 ServerDao serverDao = new ServerDao();
 try {
  serverDao.Menu(socket);
 } catch (ClassNotFoundException e) {
  // TODO Auto-generated catch block
  e.printStackTrace();
 } catch (IOException e) {
  // TODO Auto-generated catch block
  e.printStackTrace();
 }
 }

 public static void main(String[] args) {
 ServerSocket serverSocket = null;
 Socket socket = null;
 try {
  serverSocket = new ServerSocket(11536);
 } catch (IOException e1) {
  e1.printStackTrace();
 }
 try {
  while (true) {

  socket = serverSocket.accept();
  new Thread(new Server(socket)).start();
  }
 } catch (IOException e) {
  // TODO Auto-generated catch block
  e.printStackTrace();
 }
 }
}

ServerDao

package SocketS;

import java.io.BufferedReader;
import java.io.File;
import java.io.FileOutputStream;
import java.io.FileReader;
import java.io.IOException;
import java.io.InputStream;
import java.io.PrintWriter;
import java.net.Socket;
import java.util.Scanner;

import Cards.Cards;
import Cards.CardsDao;
import User.UsersDao;

/**
 * 服务的操作
 *
 * @author Administrator
 *
 */
public class ServerDao {
 UsersDao ud = new UsersDao();
 File file = new File("D:\\Users.txt");

 /**
 * 服务器接收Client发来的注册信息。并且将用户信息保存到文件中
 * 暗
 * @param socket
 * @return
 * @throws IOException
 * @throws ClassNotFoundException
 */
 public boolean isRegistCheck(Scanner sc) throws IOException, ClassNotFoundException {
 String userStr = getObjectFromSocket(sc);
 // 将读取的User对象写入文件中
 PrintWriter printWriter = new PrintWriter(new FileOutputStream(file,true));
 printWriter.println(userStr);
 printWriter.flush();
 return true;
 }

 /**
 * 检查登录信息是否正确 ,未完成!!!
 *
 * @param socket
 * @return 返回登录信息是否正确
 * @throws IOException
 * @throws ClassNotFoundException
 */
 public boolean isLoginCheck(Scanner sc) throws IOException, ClassNotFoundException {
 String userStr = getObjectFromSocket(sc);
 BufferedReader bufferedReader = new BufferedReader(new FileReader(file));
 String str = bufferedReader.readLine();
 while (str != null) {
  if (str.contains(userStr)) {
  return true;
  }
  str = bufferedReader.readLine();
 }
 return false;
 }

 /**
 * 获取客户端提供的Users对象
 * @param socket 传入的对应客户端网络套接字
 * @param reader 已经包装的BufferedReader 类获取了网络输入流
 * @return 返回Users对象
 * @throws IOException
 * @throws ClassNotFoundException
 */
 private String getObjectFromSocket(Scanner sc) throws IOException, ClassNotFoundException {
 // 读取网络流,获取客户端提供的Users对象
 String str = null;
 System.out.println(sc.hasNextLine());
 while (sc.hasNextLine()) {
  str = sc.nextLine();
  return str;
 }
 return str;

 }

 private String getCards(String choiceCards, PrintWriter printWriter){
 CardsDao cardsDao = new CardsDao();
 if ("1".equals(choiceCards)) {
  Cards card = cardsDao.once();
  return card.getName();
 }else if ("2".equals(choiceCards)) {//10连
  Cards[] cardsArr = cardsDao.tenTimes();
  StringBuffer sb = new StringBuffer();
  for (int i = 0; i < cardsArr.length; i++) {
  sb.append(cardsArr[i].getName()+" ");
  }
  return sb.toString();

 }
 return null;
 }

 /**
 * 服务器接收用户传来的操作信息提供菜单
 *
 * @param socket
 * @throws IOException
 * @throws ClassNotFoundException
 */
 public void Menu(Socket socket) throws IOException, ClassNotFoundException {
 // 先处理玩家发来的注册登录选项
 InputStream in = socket.getInputStream();
 Scanner sc = new Scanner(in);
 byte[] by = new byte[10];
 in.read(by, 0, by.length);
 String str = new String(by);
 String str1 = "1";
 String str2 = "2";
 System.out.println(str);
 str =str.trim();
 PrintWriter printWriter = new PrintWriter(socket.getOutputStream());

 boolean flag = true;
 if (str1.equals(str)) { // 登录
  printWriter.println("请输入登录信息");
  printWriter.flush();
  flag= isLoginCheck(sc);
 } else if (str2.equals(str)) {//
  printWriter.println("请输入注册信息");
  printWriter.flush();
  isRegistCheck(sc);
  flag= isLoginCheck(sc);
 }

 if (flag) {
  System.out.println("欢迎登录");
 }else {
  System.out.println("请您注册后再登录");
  System.exit(0);
 }

 while (true) {
  //获取玩家的选择抽卡方式
  by = new byte[10];
  in.read(by, 0, by.length);
  String choiceCards = new String(by);
  choiceCards = choiceCards.trim();
  //调取抽卡游戏:
   String cardsStr = getCards(choiceCards, printWriter);
   printWriter.println(cardsStr);
   printWriter.flush();
 }
 }

}

抽卡的具体实现(比较简单)

package Cards;

import java.util.Random;

/**
 * 抽卡类
 * @author Administrator
 *
 */
public class CardsDao {

 public Cards once(){
 double d = Math.random();
 if (d>0 && d<=0.01) {
  return new NvWa();
 }else if (d>0.01 && d<=0.1) {
  return new Crafty();
 }else if(d>0.1){
  Random random = new Random();
  switch (random.nextInt(3)) {
  case 0:
  return new HeavenlyHound();
  case 1:
  return new BlackFengHuang();
  case 2:
  return new NineFox();
  default:
  break;
  }

 }
 return null;
 } 

 public Cards[] tenTimes(){
 Cards[] cardsArr = new Cards[10];
 for (int i = 0; i < cardsArr.length; i++) {
  Cards card = once();
  cardsArr[i] = card;
 }
 return cardsArr;
 }

}

以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持我们。

(0)

相关推荐

  • 基于Java实现抽奖系统

    本次任务要求为某商场开发一套幸运抽奖系统,客户必须首先注册成为该商场会员,会员登录成功后,就可以参加抽奖活动了. 注册 用户选择"注册"菜单,进入注册界面.输入用户名和密码后,系统提示注册成功,并给出会员卡号. 登录 注册成功后,用户选择"登录"菜单,进入登录界面.输入注册时的用户名和密码.登录成功,系统提示欢迎信息.如果用户和密码输入错误,提示用户继续输入,最多有3次机会. 抽奖 登录成功后,用户选择"抽奖"菜单,进入幸运抽奖界面.输入会员卡号

  • java实现抽奖概率类

    本文实例为大家分享了java实现抽奖概率类的具体代码,供大家参考,具体内容如下 在一些项目需求中,可能会遇到抽奖问题,如提供一系列奖品及获奖概率,要求根据概率返回每次抽到的奖品.以下是本人在实际项目中写的一个抽奖工具类,与大家共同分享: import java.util.ArrayList; import java.util.List; import java.util.Random; /** * 抽奖工具类,概率和可以不等于1 * 概率为百分数去掉百分号的部分,如10%,则为10 * 抽奖操作

  • 纯java代码实现抽奖系统

    本文实例为大家分享了java实现抽奖系统 的具体代码,供大家参考,具体内容如下 模拟一个在终端登陆注册的页面 public class Cjtest { public static void main(String[] args) { String isGoOn = "n"; //循环的判断条件是否继续 do { System.out.println("*********幸运52********"); System.out.println("1.注册&qu

  • java实现砸金蛋抽奖功能

    本文实例为大家分享了java实现砸金蛋抽奖的具体代码,供大家参考,具体内容如下 代码如下 需求:用户每一次砸金蛋,抽中一等奖的概率为2% 二等奖10% 三等奖18% 四等奖70%. 累计砸第n次时必抽中x等奖以上的奖品.比如,累计砸第5次,则此次必中二等奖及以上的奖品.且配置的此次必中中奖概率不一样. /** * 金蛋抽奖 * userId : 抽奖用户ID * consumeType : 抽奖消耗的物品 1:金币 2:次数 */ @Override public Map<String, Obj

  • Java抽奖算法第二例

    本文实例为大家分享了java抽奖算法,供大家参考,具体内容如下 1. 算法分析  根据概率将奖品划分区间,每个区间代表一个奖品,然后抽取随机数,反查落在那个区间上,即为所抽取的奖品. 2. 代码 核心算法 public class Arithmetic { // 放大倍数 private static final int mulriple = 1000000; public int pay(List<Prize> prizes) { int lastScope = 0; // 洗牌,打乱奖品次

  • 简单实现java抽奖系统

    本文为大家分享了java抽奖系统的具体代码,供大家参考,具体内容如下 用户信息类 /* * 用户信息类 * 1.账号 * 2.密码 * 3.卡号 * 4.是否登录 */ public class User { public static String userName = ""; public static String passWord = ""; public static int cardNumber = 0; // 是否登录 public static bo

  • Java实现游戏抽奖算法

    常用抽奖算法对比 基础的游戏抽奖算法通常要求实现在指定奖品的集合中,每个奖品根据对对应概率进行抽取.个人了解的主要有以下几中抽奖算法: 随机数一一对应 算法思想 这种算法思想最为简单.将n个奖品编号0 - N-1,其中各类奖品的概率通过其数量体现,最后程序产生0~n-1之间的随机数便是抽中的奖品编号.例如: 苹果手机概率1%,网站会员20%,折扣券20%,很遗憾59%.这样,编号0是苹果手机,1-20是会员,21-40是折扣券,41~100是 很遗憾.产生的随机数落在那个区间,就代表那个奖品被抽

  • Java实现简单抽奖功能界面

    本文实例为大家分享了Java实现简单抽奖功能的具体代码,供大家参考,具体内容如下 要求:定义文本框添加姓名,将姓名存储并且在界面中可见,点击抽奖按钮进行抽奖并输出最后的中奖得主. 关于抽奖当然需要用到随机数的生成函数,在Java中Random 的使用合适比较简单的: 有两种不同的Random方法的使用,其中一种是Math中的random. 该方法生成的是0-1之间的浮点数,如果要生成整数类型的数字,可以乘一个整数,强制转换为整数类型. int n = (int)(Math.random()*x)

  • Java实现抽奖功能

    本文实例为大家分享了Java实现抽奖功能的具体代码,供大家参考,具体内容如下 1 概述 项目开发中经常会有抽奖这样的营销活动的需求,例如:积分大转盘.刮刮乐.老虎机等等多种形式,其实后台的实现方法是一样的,本文介绍一种常用的抽奖实现方法. 整个抽奖过程包括以下几个方面: 奖品 奖品池 抽奖算法 奖品限制 奖品发放 2 奖品 奖品包括奖品.奖品概率和限制.奖品记录. 奖品表: CREATE TABLE `points_luck_draw_prize` ( `id` bigint(20) NOT N

  • Java实现多用户注册登录的幸运抽奖

    本文实例为大家分享了Java实现简单幸运抽奖的具体代码,供大家参考,具体内容如下 代码模块: User类: package test1; public class User { private String userName; private String password; private int vipID; public User(String userName,String password,int vipID) { this.userName = userName; this.pass

随机推荐