.net制作的抽餐厅和游戏装备的小程序

随便新建一个asp.net web项目,拖入即可。现在知道为什么游戏老是暴不出好装备,因为他的权重是非常小地。。。中午吃饭随机一下,想去哪一家,就把权重值设大一点,再中不了,就认命吧!

Default.aspx

<%@ Page Language="C#" AutoEventWireup="true" CodeFile="Default.aspx.cs" Inherits="_Default" %>

<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">

<html xmlns="http://www.w3.org/1999/xhtml">
<head runat="server">
  <title>加权随机</title>
</head>
<body>
  <form id="form1" runat="server">
  <div>
  <asp:TextBox ID="txtNum" runat="server" Text="100" ></asp:TextBox>
  <br />
  <br />
  <asp:Button ID="btnRandom" runat="server" Text="开始抽奖(装备)" onclick="btnRandom_Click"/>
  <br />
  <br />
  <asp:Button ID="btnRandomFood" runat="server" Text="开始抽奖(餐厅)" onclick="btnRandomFood_Click"/>
  <br />
  <br />
  <asp:Button ID="btnClear" runat="server" Text="清屏" onclick="btnClear_Click"/>
  <br />
  <asp:Literal ID="lblResult" runat="server"></asp:Literal>
  </div>
  </form>
</body>
</html>

Default.aspx.cs

using System;
using System.Collections.Generic;
using System.Linq;
using System.Web;
using System.Web.UI;
using System.Web.UI.WebControls;

public partial class _Default : System.Web.UI.Page
{
  //<string,int>:<名称:权重>
  public Dictionary<string, int> Goods = new Dictionary<string, int>();
  public int TotalWeight = 0;

  public class Good
  {
    /// <summary>
    /// 名称
    /// </summary>
    public string Name
    {
      get;
      set;
    }
    /// <summary>
    /// 权重(大于等于1,否则出现的可能性为0)
    /// </summary>
    public int Weight
    {
      get;
      set;
    }
  }

  public List<Good> Result = new List<Good>();

  protected void Page_Load(object sender, EventArgs e)
  {
  }

  /// <summary>
  /// 初始化装备 俺是《梦三国》玩家,嘿嘿
  /// </summary>
  protected void InitGoods()
  {
    Goods.Clear();
    TotalWeight = 0;

    Goods.Add("寒冰爪", 2);     //神器(拳爪类)
    Goods.Add("重毛皮", 300);
    Goods.Add("小毛皮", 1000);
    Goods.Add("轻毛皮", 1000);
    Goods.Add("神之防具打造书", 5);
    Goods.Add("传说武器打造书", 20);
    Goods.Add("紫檀树枝", 300);
    Goods.Add("硬毛皮", 600);
    Goods.Add("勾魂水晶", 8);
    Goods.Add("真龙炙舞剑", 30);
    Goods.Add("董卓勾魂", 1);    //神器中的神器(长柄类)

    foreach (KeyValuePair<string, int> kvp in Goods)
    {
      TotalWeight += kvp.Value;
    }
  }

  /// <summary>
  /// 初始化餐厅,公司楼下餐厅比较多,只写几个,意思意思。。。
  /// </summary>
  protected void InitFood()
  {
    Goods.Clear();
    TotalWeight = 0;

    Goods.Add("清真兰州", 1);
    Goods.Add("长安客", 1);
    Goods.Add("迎客松", 1);
    Goods.Add("吉祥混沌", 1);

    foreach (KeyValuePair<string, int> kvp in Goods)
    {
      TotalWeight += kvp.Value;
    }
  }

  protected int GetTryParse()
  {
    try
    {
      return int.Parse(txtNum.Text);
    }
    catch {
      return 1;
    }
  }

  //开始抽奖(装备)
  protected void btnRandom_Click(object sender, EventArgs e)
  {
    InitGoods();

    lblResult.Text = lblResult.Text + "<br/>";

    int Count = GetTryParse();
    for (int i = 1; i <= Count; i++)
    {
      Random rdm = new Random(GetRandomSeed());

      int Weight = rdm.Next(1, TotalWeight + 1);

      ProduceResult(Weight);
    }

    foreach (KeyValuePair<string, int> kvp in Goods)
    {
      int c = Result.Count(d => d.Name == kvp.Key);
      double rate = c * 1.0 / Count * 1.0 * 100;

      lblResult.Text = lblResult.Text + "物品名称:" + kvp.Key + " 权重:" + kvp.Value + " 暴出次数:" + c.ToString() + " 暴出率:" + rate + "%<br/>";
    }

  }

  //开始抽奖(餐厅)
  protected void btnRandomFood_Click(object sender, EventArgs e)
  {
    InitFood();

    lblResult.Text = lblResult.Text + "<br/>";

    int Count = GetTryParse();
    for (int i = 1; i <= Count; i++)
    {
      Random rdm = new Random(GetRandomSeed());

      int Weight = rdm.Next(1, TotalWeight + 1);

      ProduceResult(Weight);
    }

    foreach (KeyValuePair<string, int> kvp in Goods)
    {
      int c = Result.Count(d => d.Name == kvp.Key);
      double rate = c * 1.0 / Count * 1.0 * 100;

      lblResult.Text = lblResult.Text + "餐厅名称:" + kvp.Key + " 权重:" + kvp.Value + " 暴出次数:" + c.ToString() + " 暴出率:" + rate + "%<br/>";
    }

  }

  /// <summary>
  /// 根据随机权重判断所在范围
  /// </summary>
  /// <param name="Weight"></param>
  protected void ProduceResult(int Weight)
  {
    int min = 1;
    int max = 1;
    foreach (KeyValuePair<string, int> kvp in Goods)
    {
      max = min + kvp.Value - 1;

      if (Weight >= min && Weight <= max)
      {
        Good g = new Good();
        g.Name = kvp.Key;
        g.Weight = kvp.Value;
        Result.Add(g);
        return;
      }

      min = max + 1;
    }
  }

  /// <summary>
  /// 随机种子值(防止速度过快造成的重复)
  /// </summary>
  /// <returns></returns>
  private static int GetRandomSeed()
  {
    byte[] bytes = new byte[4];
    System.Security.Cryptography.RNGCryptoServiceProvider rng = new System.Security.Cryptography.RNGCryptoServiceProvider();
    rng.GetBytes(bytes);
    return BitConverter.ToInt32(bytes, 0);
  }

  //清屏操作
  protected void btnClear_Click(object sender, EventArgs e)
  {
    lblResult.Text = "";
  }
}

以上所述就是本文的全部内容了,希望大家能够喜欢。

(0)

相关推荐

  • php实现可以设置中奖概率的抽奖程序代码分享

    <?php /** * 抽奖 * @param int $total */ function getReward($total=1000) { $win1 = floor((0.12*$total)/100); $win2 = floor((3*$total)/100); $win3 = floor((12*$total)/100); $other = $total-$win1-$win2-$win3; $return = array(); for ($i=0;$i<$win1;$i++) {

  • php解决抢购秒杀抽奖等大流量并发入库导致的库存负数的问题

    我们知道数据库处理sql是一条条处理的,假设购买商品的流程是这样的: sql1:查询商品库存 if(库存数量 > 0) { //生成订单... sql2:库存-1 } 当没有并发时,上面的流程看起来是如此完美,假设同时两个人下单,而库存只有1个了,在sql1阶段两个人查询到的库存都是>0的,于是最终都执行了sql2,库存最后变为-1,超售了,要么补库存,要么等用户投诉吧. 解决这个问题比较流行的思路: 1.用额外的单进程处理一个队列,下单请求放到队列里,一个个处理,就不会有并发的问题了,但是要

  • JS模拟抽奖序效果实现代码

    JS模拟抽奖效果 .a1{ position:relative; font-family:Verdana; font-size:20px; color:#888888; } function lotto(){ if (!document.all&&!document.layers) return for (j=1; j  "+Nos+""); document.layers.layer1.document.close(); } T=setTimeout('lo

  • .net+mssql制作抽奖程序思路及源码

    抽奖程序: 思路整理,无非就是点一个按钮,然后一个图片旋转一会就出来个结果就行了,可这个程序的要求不是这样的,是需要从数据库中随机抽取用户,根据数据库中指定的等级和人数,一键全部抽出来结果就行了.同时需要存储到数据库.还需要一个导出的功能. 不能遗漏的是,如果通过随机数根据id来抽取的话,需要考虑id不连续的问题,如果全部取出id也不现实.尽量少的去读写数据库. 数据库: 复制代码 代码如下: CREATE TABLE [dbo].[users](    [id] [int] IDENTITY(

  • js和html5实现手机端刮刮卡抽奖效果完美兼容android/IOS

    绝对值得看的来篇,哈哈.本人亲自完成,有错误请大家指出: 现在的手机完美支持html5,所以如果手机端想要做个抽奖模块的话,用刮刮卡抽奖效果,相信这个互动体验是非常棒的 ​ps:由于本人没有wp8系统的手机,所以没法兼容wp8系统的,目前完美兼容android,IOS 如果要在pc浏览的话,得改下js,目前支持谷歌,火狐,ie>=10,如果网友想要的话我就去写个 代码如下: 复制代码 代码如下: <!DOCTYPE html> <html lang="en"&g

  • jquery 年会抽奖程序

    看了一下,传不了源代码,特粘帖html 复制代码 代码如下: <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd"> <html xmlns="http://www.w3.org/1999/xhtml"> <head> <

  • Android实现抽奖转盘实例代码

    本文详述了android抽奖程序的实现方法,程序为一个抽奖大转盘代码,里面定义了很多图形方法和动画. 实现主要功能的SlyderView.java源代码如下: import android.app.Activity; import android.content.Context; import android.graphics.BlurMaskFilter; import android.graphics.Canvas; import android.graphics.Color; import

  • .net制作的抽餐厅和游戏装备的小程序

    随便新建一个asp.net web项目,拖入即可.现在知道为什么游戏老是暴不出好装备,因为他的权重是非常小地...中午吃饭随机一下,想去哪一家,就把权重值设大一点,再中不了,就认命吧! Default.aspx <%@ Page Language="C#" AutoEventWireup="true" CodeFile="Default.aspx.cs" Inherits="_Default" %> <!DO

  • 基于javascript制作经典传统的拼图游戏

    本文实例为大家分享了javascript制作经典传统的拼图游戏的关键代码,供大家参考,具体内容如下 效果图: 拼出你喜欢的白雪公主和七个小矮人 实现代码: <!DOCTYPE html> <html> <head> <title>pingtu.html</title> <meta http-equiv="keywords" content="keyword1,keyword2,keyword3">

  • python基于tkinter制作图形界面的2048游戏

    2048游戏输出 项目先决条件 前提条件如下: 1. Python 2. Tkinter 创建main.py 代码: from tkinter import * from tkinter import messagebox import random class Board: bg_color={ '2': '#eee4da', '4': '#ede0c8', '8': '#edc850', '16': '#edc53f', '32': '#f67c5f', '64': '#f65e3b', '

  • Python制作当年第一款手机游戏-贪吃蛇游戏(练习)

    目录 1. 创建游戏窗口 1.1 游戏初始化 1.2 初始化蛇的位置 蛇的长度 10 10 也就是蛇的 X Y 坐标 1.3 初始化食物的位置 1.4 开启游戏循环 1.5 填充背景为白色 1.6 绘制背景 1.7绘制蛇 2. 绘制贪吃蛇与食物 2.1 获取蛇的长度,移动蛇的身子 2.2 更改蛇头位置 2.3 键盘控制移动职位 2.4 获取蛇的长度,移动蛇的身子 3. 蛇吃食物 3.1 碰撞检测 如果蛇吃掉食物 3.2 如果蛇吃掉了自己 前言: 文章利用Python pygame做一个贪吃蛇的小

  • 使用Matlab制作简易版八分音符酱游戏

    目录 效果 游戏方式 说明 工具箱主要部分代码 完整代码 效果 游戏方式 给电脑插上耳机后叫喊叭 ! 说明 1)使用此代码应首先安装: Audio Toolbox工具箱,博主使用的版本为: Audio Toolbox 版本 3.0 (R2021a) 2)为保证游戏加载完所有素材后再开始,故设置了加载完成界面后停滞3秒再开始运行游戏 若一进入界面就挂了,应是资源加载太久,请关掉窗口后尝试重新运行 工具箱主要部分代码 1)基础设置 这里懒得改了直接照抄的语音命令识别的截断数据,大家可以依据自己需要进

  • 教你用Pygame制作简单的贪吃蛇游戏

    目录 1.序言 2.安装与导入 3.定义后续需要的参数 4.绘制蛇与食物 5.游戏规则与运行 6.成品展示 7.完整代码 总结 1.序言 目前基本上软测会用到的工具或者第三方库都已经被写完,本着不要逮着一只羊进行薅羊毛原则,换个赛道,这次就使用pygame库写个简单的贪吃蛇吧,当做熟悉python练手也是不错的. 2.安装与导入 使用pip install pygame进入安装,安装成功后导入所需模块: import pygame,sys,random from pygame.locals im

  • 微信小程序五子棋游戏的棋盘,重置,对弈实现方法【附demo源码下载】

    本文实例讲述了微信小程序五子棋游戏的棋盘,重置,对弈实现方法.分享给大家供大家参考,具体如下: DEMO下载 五子棋对弈.悔棋DEMO 效果图 分析 1. 采用微信小程序的canvas制作五子棋: 2. 确定棋盘大小及格数: 3. 绘制棋盘--通过棋盘宽高和格数计算间距,同时保存坐标点: 4. 黑方和白方下子--定义一个布尔变量代表各自的身份: 5. 重置棋盘--重新开始: 6. 通过判断当前棋手,悔棋时进行改变. 绘制棋盘 drawLine(arr){ arr.forEach(current

  • 有关微信的小程序和小游戏的区别

    小游戏是小程序的一个类目,小游戏是微信开放给小程序的更多的能力,让小程序开发者有了开发游戏的能力.小游戏没有WXSS.WXML.多页面等内容,但加了一些渲染.文件系统以及后台多线程的功能. 小游戏的运行环境是小程序环境的扩展,基本思路也是封装必要的 WEB 接口提供给用户,尽可能追求和 WEB 同样的开发体验.小游戏在小程序环境的基础上提供了 WebGL 接口的封装,使得渲染能力和性能有了大幅度提升.不过由于这些接口都是微信团队通过自研的原生实现封装的,所以并不可以等同为浏览器环境. 小游戏的运

  • 微信小程序的分类页面制作

    微信小程序实的分类页面制作 先上效果图. 这个界面布局难度不是很大,css基础好的,很快就实现了,分类界面,左边是一级目录,右边是一级目录对应的二级目录,根据 这个需求,我们数据设计的结构一定是数组嵌套数组,第一个数组包含一级目录数据,嵌套的数组包含的是二级目录的数据. 代码的实现 classify.js Page({ data: { cateItems: [ { cate_id: 1, cate_name: "护肤", ishaveChild: true, children: [ {

  • 微信小程序 swiper制作tab切换实现附源码

    微信小程序 swiper制作tab切换 实现效果图: swiper制作tab切换 index.html <view class="swiper-tab"> <view class="swiper-tab-list {{currentTab==0 ? 'on' : ''}}" data-current="0" bindtap="swichNav">Seside1</view> <view

随机推荐