黃金點游戲

来源:http://www.cnblogs.com/walldong/archive/2016/04/09/gold.html
-Advertisement-
Play Games

黃金點游戲 黃金點游戲是一個數字小游戲,其游戲規則是: N個同學(N通常大於10),每人寫一個0~100之間的有理數 (不包括0或100),交給裁判,裁判算出所有數字的平均值,然後乘以0.618(所謂黃金分割常數),得到G值。提交的數字最靠近G(取絕對值)的同學得到N分,離G最遠的同學得到-2分,其 ...


黃金點游戲

      黃金點游戲是一個數字小游戲,其游戲規則是:

      N個同學(N通常大於10),每人寫一個0~100之間的有理數 (不包括0或100),交給裁判,裁判算出所有數字的平均值,然後乘以0.618(所謂黃金分割常數),得到G值。提交的數字最靠近G(取絕對值)的同學得到N分,離G最遠的同學得到-2分,其他同學得0分。玩了幾天以後,大家發現了一些很有意思的現象,比如黃金點在逐漸地往下移動。

      現在請大家根據這個游戲規則,編一個可以多人一起玩的小游戲程式,要求如下:

      1、本作業屬於結對編程項目,必須由二人共同完成,並分別將本次作業過程發到博客,同時將本次作業源代碼提交到codeing系統;

      2、如果可能的話儘量以C/S或B/S方式實現,即利用伺服器接收和處理所有玩家提交的數字,並將結果反饋給各玩家,玩家可以通過客戶端提交的數字;

      3、如果採用單機方式實現的話,需要為用戶提供便利的輸入界面;

      4、該游戲每次至少可以運行10輪以上,並能夠保留各輪比賽結果。

看到題目,我決定用自己比較擅長的html+js完成這個任務。

首先,如題目所說。有N個同學,於是,第一步便是確定同學的人數。

<div class="col-lg-6 play">
            <div class="input-group">
               <input type="text" class="form-control" id="P_numa">
               <span class="input-group-btn">
                  <button class="btn btn-default" type="button" onclick="CreatBoxa()">
                     游戲人數
                  </button>
               </span>
            </div>
    </div>

這段代碼便是想客戶展示一個輸入框,輸入進行游戲的人數N。然後點擊游戲人數按鈕,便可以動態的生成N個輸入框。用戶便可以在輸入框中輸入自己的數字。進行游戲。動態生成輸入框的代碼如下所示:

function CreatBoxa() {
    document.getElementById("resulta").innerHTML="";
    document.getElementById("Box_numa").innerHTML="";
    var Pnum1=document.getElementById("P_numa").value;
    var oa = document.getElementById("Box_numa");
    for (i = 0; i < Pnum1; i++) {
        var Box_numa = document.createElement("input"); 
        Box_num.setAttribute('type', 'text');
        Box_num.setAttribute('name', 'B_numa');
        Box_num.setAttribute('class', 'form-control');
        Box_num.setAttribute('class', 'input-sm');
        oa.appendChild(Box_numa); 
    }
}

前臺代碼:

<div class="headera">
    <h1>Gold Point</h1>
  </div>
  <div class="contenta">
    <div class="col-lg-6 play">
            <div class="input-group">
               <input type="text" class="form-control" id="P_numa">
               <span class="input-group-btn">
                  <button class="btn btn-default" type="button" onclick="CreatBoxa()">
                     游戲人數
                  </button>
               </span>
            </div>
    </div>
    <button type="button" class="btn btn-default" onclick="nexta()">開始游戲</button>
    <div class="cona">
        <div id="Box_numa">
        </div>
        <div id="resulta">
        </div>
        <div id="result2a">
        </div>
    </div>
  </div>

  如上面代碼所示,CreatBox的函數便是先清空前臺頁面div分別是result和B_num的內容。然後獲取用戶輸入的人數,存入變數Pnum1裡面。最後用for迴圈通過document.createElement("")創建輸入視窗。

緊接著,用戶輸入完成數值後,點擊開始游戲便在下方動態生成兩個文本框textarea區域。然後將每輪的分數顯示在result裡面,並將每輪的總分數顯示在result2裡面。動態生成文本框區域如下所示:

function Creatareaa(aa) {
    document.getElementById("resulta").innerHTML="";
    var oa = document.getElementById("resulta");
    var resa = document.createElement("textarea"); 
    res.setAttribute('name', 'resa');
    res.setAttribute('class', 'resa');
    res.setAttribute('rows', '10');
    res.setAttribute('cols', '40');
    res.setAttribute('readonly', 'readonly');
    oa.appendChild(resa); 
    for (i = 0; i <a.length; i++) {
        ja=i+1;
        resa.innerHTML+="第"+ja+"個人的分數是:"+aa[i]+"\n";
    }
}

總體與創建游戲人數輸入框相似。然後下麵便是計算黃金點數的函數,通過獲取用戶輸入的游戲數值,然後用數組的方式放到數組P裡面。最後返回計算出的黃金點數A。

function Get_num() {
    var A_numa= new Array();
    var Pa=document.getElementsByName("B_numa");
    for (i = 0; i <P.length; i++) {
        A_numa[i]=Pa[i].value;
    }
    var suma=0;
    for (i = 0; i <A_numa.length; i++) {
        suma=suma+parseFloat(A_numa[i]);
    }
    Sa=suma/A_numa.length;
    Aa=Sa*0.618;
    return Aa;
}

下麵是計算分數函數,通過計算得出所以游戲數和黃金點數之間的差的絕對值放到數組Pe_num中,遍歷得出的最大值max和最小值min。最後用過if語句判斷賦予分數數組P_sum分數。然後返回P_sum

function Counta(S_numa) {
    var P_suma=new Array();   
    var Pe_numa=new Array();
    var Sa=Get_numa();
    for (i = 0; i < S_numa.length; i++) {
        Pe_numa[i]=Math.abs(Sa-S_numa[i]);
    }
    var maxa=Pe_numa[0];
    for (i = 0; i <Pe_numa.length; i++) {
        if (maxa<Pe_numa[i]) {
            maxa=Pe_numa[i];
        }
    }
    var mina=Pe_numa[0];
    for (i = 0; i < Pe_numa.length; i++) {
        if (mina>Pe_numa[i]) {
            mina=Pe_numa[i];
        }
    }
    for (i = 0; i <Pe_numa.length; i++) {
        if (maxa==Pe_numa[i]) {
            P_suma[i]=10;
        }
        else if (mina==Pe_numa[i]) {
            P_suma[i]=-2;
        }
        else {
            P_suma[i]=0;
        }
    }
    var S1a = new Array();  
            S1a[0]=P_suma[0]
    return P_suma;
}

最後就是計算總分函數:

var qa=0;
var dataa=new Array();
function nexta() {
    var Snuma=new Array();
    var numa=document.getElementsByName("B_numa");
    for (i = 0; i <numa.length; i++) {
        Snuma[i]=numa[i].value;
    }
    qa++;
    var Aa=Counta(Snum);
    Creatareaa(A);
    var Ba=new Array();
    if (qa==1) {
        for (i = 0; i < Aa.length; i++) {
            dataa[i]=parseInt(Aa[i]);
        }
    }else {
        for (i = 0; i <Aa.length; i++) {
        var aa=parseInt(Aa[i]);
        dataa[i]=dataa[i]+aa;
    }
    }
    Creatarea2a(dataa);
}

  首先,在函數外創建兩個全局變數q和數組data。將Count函數得出的分數數組傳入數組A中。然後用Creatarea()函數顯示在頁面中。當全局變數q為1的時候,表示此時的next函數運行了一次。此時總分便是數組A的值,將A的值通過整形數強制轉換傳入data數組(為了方便後面數組內數的運算)。當q不等於1的時候,說明函數運行了一次以上,便用for迴圈計算data。沒執行一次函數,A內的數值便能累加當全局變數數組B中。便實現了總分的計算,然後通過Creatarea2()函數顯示在div的id為result2盒子內。這邊是整個程式設計的思路。

結伴照片:

運行效果如下所示:

主頁:

第一步輸入人數,點擊游戲人數:

第二步輸入數值,點擊開始游戲:

第三步輸入第二輪數值,輸入完點擊開始游戲:

如上圖所示,基本完成任務。上一局是想查詢上次一的數值和分數,但還沒有完成。現在整個程式還有幾點沒有完成:1、限制人數  2、限制數值大小   3、頁面顯示效果不佳   4、查詢前面的游戲內容   5、限制游戲次數。   


您的分享是我們最大的動力!

-Advertisement-
Play Games
更多相關文章
  • (非原創) 目錄 1. Nodejs的介紹 Node.js的是建立在Chrome的JavaScript的運行時,可方便地構建快速,可擴展的網路應用程式的平臺。Node.js使用事件驅動,非阻塞I/O模型,輕量、高效,可以完美地處理時時數據,運行在不同的設備上。 1.1. 誰在用Nodejs? 從No ...
  • 1.width & height 2.background : a.background-color b.background-image:url() c.background-repeat : no-repeat , repeat-x , repeat-y ; d.background-posit ...
  • http://www.cocoachina.com/webapp/20150126/11020.html ...
  • Notepad++、Editplus 是常用的開發編輯器。這些在Window系統下,比較容易找到,但是在MAC系統下,有的是收費的,有的是不支持。我開發的時候,用的是TextWrangler,如圖: 1、下載安裝完成,打開之後: 2、開始編輯: 3、編輯完成之後、快捷鍵command+s,輸入名字和 ...
  • (1)獲得URL參數 function GetQueryString("url參數名") { var reg = new RegExp("(^|&)" + name + "=([^&]*)(&|$)", "i"); var r = window.location.search.substr(1).m ...
  • HTML其實就是把頁面的數據封裝並加上標簽 表頭<head> <title> 瀏覽器標題欄顯示的內容 <base> 有href和target屬性,href指定網頁中所有超鏈接的基本目錄,target指定打開超鏈接的方式,如_blank為在新視窗中打開 <me ...
  • 今天主要學習了三個特殊的引用類型:Boolean,Number和String。同時也回顧了一下以前學習的知識。 首先,我們知道基本類型值不是對象,因此不應該會有方法。但是,實際上它們是有方法的。每當讀取一個基本類型值的時候,後臺就會創建一個對應的包裝類型的對象,從而讓我們可以調用一些方法來操作這些數 ...
  • 函數定義方法多種 : 1function f(x){ (語句編製函數) 2 函數直接量直接生成 3 Function()構造函數 return x; var f=function(x){return x;} var f=new Function(){"x","return x;"} } var n= ...
一周排行
    -Advertisement-
    Play Games
  • 移動開發(一):使用.NET MAUI開發第一個安卓APP 對於工作多年的C#程式員來說,近來想嘗試開發一款安卓APP,考慮了很久最終選擇使用.NET MAUI這個微軟官方的框架來嘗試體驗開發安卓APP,畢竟是使用Visual Studio開發工具,使用起來也比較的順手,結合微軟官方的教程進行了安卓 ...
  • 前言 QuestPDF 是一個開源 .NET 庫,用於生成 PDF 文檔。使用了C# Fluent API方式可簡化開發、減少錯誤並提高工作效率。利用它可以輕鬆生成 PDF 報告、發票、導出文件等。 項目介紹 QuestPDF 是一個革命性的開源 .NET 庫,它徹底改變了我們生成 PDF 文檔的方 ...
  • 項目地址 項目後端地址: https://github.com/ZyPLJ/ZYTteeHole 項目前端頁面地址: ZyPLJ/TreeHoleVue (github.com) https://github.com/ZyPLJ/TreeHoleVue 目前項目測試訪問地址: http://tree ...
  • 話不多說,直接開乾 一.下載 1.官方鏈接下載: https://www.microsoft.com/zh-cn/sql-server/sql-server-downloads 2.在下載目錄中找到下麵這個小的安裝包 SQL2022-SSEI-Dev.exe,運行開始下載SQL server; 二. ...
  • 前言 隨著物聯網(IoT)技術的迅猛發展,MQTT(消息隊列遙測傳輸)協議憑藉其輕量級和高效性,已成為眾多物聯網應用的首選通信標準。 MQTTnet 作為一個高性能的 .NET 開源庫,為 .NET 平臺上的 MQTT 客戶端與伺服器開發提供了強大的支持。 本文將全面介紹 MQTTnet 的核心功能 ...
  • Serilog支持多種接收器用於日誌存儲,增強器用於添加屬性,LogContext管理動態屬性,支持多種輸出格式包括純文本、JSON及ExpressionTemplate。還提供了自定義格式化選項,適用於不同需求。 ...
  • 目錄簡介獲取 HTML 文檔解析 HTML 文檔測試參考文章 簡介 動態內容網站使用 JavaScript 腳本動態檢索和渲染數據,爬取信息時需要模擬瀏覽器行為,否則獲取到的源碼基本是空的。 本文使用的爬取步驟如下: 使用 Selenium 獲取渲染後的 HTML 文檔 使用 HtmlAgility ...
  • 1.前言 什麼是熱更新 游戲或者軟體更新時,無需重新下載客戶端進行安裝,而是在應用程式啟動的情況下,在內部進行資源或者代碼更新 Unity目前常用熱更新解決方案 HybridCLR,Xlua,ILRuntime等 Unity目前常用資源管理解決方案 AssetBundles,Addressable, ...
  • 本文章主要是在C# ASP.NET Core Web API框架實現向手機發送驗證碼簡訊功能。這裡我選擇是一個互億無線簡訊驗證碼平臺,其實像阿裡雲,騰訊雲上面也可以。 首先我們先去 互億無線 https://www.ihuyi.com/api/sms.html 去註冊一個賬號 註冊完成賬號後,它會送 ...
  • 通過以下方式可以高效,並保證數據同步的可靠性 1.API設計 使用RESTful設計,確保API端點明確,並使用適當的HTTP方法(如POST用於創建,PUT用於更新)。 設計清晰的請求和響應模型,以確保客戶端能夠理解預期格式。 2.數據驗證 在伺服器端進行嚴格的數據驗證,確保接收到的數據符合預期格 ...