本站所列毕业设计(论文)资料均属于原创者所有,初衷是为大家在毕业设计(论文)过程中参考和学习交流之用。

毕业设计我帮你

服务计算概论实验报告

服务计算概论实验报告

通过这次实验,我对服务计算概论这门课有了进一步的深层次了解,把理论知识应用于实验中,也让我重新熟悉了多线程的相关内容,加深了对多线程知识的了解和用途的理解。

如需购买请QQ扫描右边二维码或者加QQ 3449649974 咨询 毕业设计(论文)代做请加QQ 2269757180


  • 详细描述

    服务计算概论实验报告
    一、实验目的
    了解多线程,并学会应用。
    二、实验内容
    编写一个java或c#多线程程序模拟乒乓球双打比赛。在该问题中,你必须使用监听器和事件。
    三、实验要求
    (1)有四个选手,A1和A2为一队,B1和B2为另外一队。A1首先发球(启动球),然后B1,A2,B2将最后发球。每一轮中选手发六个球。
    (2)选手不改变他们的位置。
    (3)比赛期间,双方选手必须轮流发球(用事件定义次序)并且在同一队中的两个选手可以竞争发球(用monitor同步他们)。
    (4)当轮到某个选手时,他/她可调用一个叫做shot(rate)的随机函数来模拟该比赛。如果是给定的概率该函数返回会“in”,如果是用1减去给定的概率,则返回“out”。例如如果rate=85%,则球在界内的概率是85%,出街的概率是15%。
    (5)如果shot函数返回in,对方选手必须通过调用shot函数把球打回。
    (6)如果shot函数返回out,对方选手将赢得1分,必须开始一个新的发球。
    (7)当每个选手发完6个球后比赛终止,分数最多的一队将赢得比赛比赛。如果两队比赛分数一样多,比赛平局。
    四、源程序及程序作用
    using System;
    using System.Collections.Generic;
    using System.Linq;
    using System.Text;
    using System.Threading;
    using System.Threading.Tasks;
     
    namespace ConsoleApplication1
    {
        class TableTennis
        {
            Random rand;
            AutoResetEvent A1event, A2event, B1event, B2event;
            int turn, rate, Apoints, Bpoints, totalServes;
            bool serve, gamePlay;
            static void Main(string[] args)
            {
                TableTennis a = new TableTennis();
            }
            public TableTennis()
            {
                totalServes = 0;
                serve = true;
                gamePlay = true;
                long tick = DateTime.Now.Ticks;
                rand = new Random((int)(tick & 0xffffffffL) | (int)(tick >> 32));
                //多线程
                A1event = new AutoResetEvent(false);
                A2event = new AutoResetEvent(false);
                B1event = new AutoResetEvent(false);
                B2event = new AutoResetEvent(false);
                Thread A1 = new Thread(playerA1);
                Thread A2 = new Thread(playerA2);
                Thread B1 = new Thread(playerB1);
                Thread B2 = new Thread(playerB2);
                A1.Start();
                A2.Start();
                B1.Start();
                B2.Start();
                A1event.Set();
            }
        
            public bool shot(int rate)//击球概率
            {
                rate = rand.Next(1, 100);
                if (rate < 86)
                    return true;
                else
                    return false;
            }
            //概率函数,有85%的概率成功打过去。
            public void notifyNextServer()//唤醒所有等待的程序运行
            {
                switch (turn)
                {
                    case 0:
                        A1event.Set();
                        break;
                    case 1:
                        B1event.Set();
                        break;
                    case 2:
                        A2event.Set();
                        break;
                    case 3:
                        B2event.Set();
                        break;
                }
            }
            public void aSwing(string str)
            {
                if (shot(rate))
                {
                    // if I got to the ball first if (shot(rate)) {
                    Console.Write("-" + str + "-in");
                    // wake up other side
                    if (str == "A1") B2event.Set();
                    else B1event.Set();
                }
                else
                {
                    Console.Write("-" + str + "- out \n");
                    Bpoints++;
                    Console.WriteLine(" The side B1B2 wins.Score=({0},{1} ) ", Apoints, Bpoints);
                    // check if that was the winning point
                    if (!gameDone())
                    {
                        serve = true;
                        notifyNextServer();
                    }
                }
            }
            public void aServe(string str)
            {
                if (shot(rate))
                {
                    Console.Write(str + "- in ");
                    //wake up other side
                    if (str == "A1") B2event.Set();
                    else B1event.Set();
                }
                else
                {
                    Console.Write(str + "- out \n");
                    Bpoints++;
                    Console.WriteLine("The side B1B2 wins.Score =({0},{1})", Apoints, Bpoints);
                    //check if that was the winning point
                    if (!gameDone())
                    {
                        serve = true;
                        notifyNextServer();
                    }
                }
            }
     
            public void bSwing(string str)
            {
                if (shot(rate))
                {
                    // if I got to the ball first if (shot(rate)) {
                    Console.Write("-" + str + "-in");
                    // wake up other side
                    if (str == "B1") A1event.Set();
                    else A2event.Set();
                }
                else
                {
                    Console.Write("-" + str + "- out \n");
                    Apoints++;
                    Console.WriteLine(" The side A1A2 wins.Score=({0},{1} ) ", Apoints, Bpoints);
                    // check if that was the winning point
                    if (!gameDone())
                    {
                        serve = true;
                        notifyNextServer();
                    }
                }
            }
            public void bServe(string str)
            {
                if (shot(rate))
                {
                    Console.Write(str + "- in ");
                    //wake up other side
                    if (str == "B1") A1event.Set();
                    else A2event.Set();
     
                }
                else
                {
                    Console.Write(str + "- out \n");
                    Apoints++;
                    Console.WriteLine("The side A1A2 wins.Score =({0},{1})", Apoints, Bpoints);
                    //check if that was the winning point
                    if (str == "B1") A1event.Set();
                    else A2event.Set();
                    if (!gameDone())
                    {
                        serve = true;
                        notifyNextServer();
                    }
                }
            }
     
     
            public void playerA1()
            {
                //while game in play
                do
                {
                    A1event.WaitOne();//write on myevent
                    if (serve && turn == 0)//if it is my to serve
                    {
                        serve = false;//then serve
                        turn = 1;
                        totalServes++;
                        aServe("A1");
                    }
                    else
                    {
                        //if i got to the ball first
                        aSwing("A1");
                    }
                }
                while (gamePlay);
            }
            public void playerA2()
            {
                //while game in play
                do
                {
                    A2event.WaitOne();//write on myevent
                    if (serve && turn == 2)//if it is my to serve
                    {
                        serve = false;//then serve
                        turn = 3;
                        totalServes++;
                        aServe("A2");
                    }
                    else
     
                    {
                        //if i got to the ball first
                        aSwing("A2");
                    }
                }
                while (gamePlay);
            }
     
            public void playerB1()
            {
                //while game in play
                do
                {
                    B1event.WaitOne();//write on myevent
                    if (serve && turn == 1)//if it is my to serve
                    {
                        serve = false;//then serve
                        turn = 2;
                        totalServes++;
                        aServe("B1");
                    }
                    else
     
                    {
                        //if i got to the ball first
                        bSwing("B1");
                    }
                }
                while (gamePlay);
            }
     
            public void playerB2()
            {
                //while game in play
                do
                {
                    B2event.WaitOne();//write on myevent
                    if (serve && turn == 3)//if it is my to serve
                    {
                        serve = false;//then serve
                        turn = 0;
                        totalServes++;
                        bServe("B2");
                    }
                    else
                    {
                        //if i got to the ball first
                        bSwing("B2");
                    }
                }
                while (gamePlay);
            }
            public bool gameDone()
            {
                if (totalServes == 24)
                {
                    if (Apoints > Bpoints)
                        Console.WriteLine("Final score = ({0},{1}).The team A1A2 wins", Apoints, Bpoints);
                    else if (Apoints < Bpoints)
                        Console.WriteLine("Final score = ({0},{1}).The team B1B2 wins", Apoints, Bpoints);
                    else
                        Console.WriteLine("Final score = ({0},{1}).The two teams tie", Apoints, Bpoints);
                    gamePlay = false;
                    return true;
                }
                else return false;
     
            }
        }
    五、}实验结果


    六、实验分析
     
    通过这次实验,我对服务计算概论这门课有了进一步的深层次了解,把理论知识应用于实验中,也让我重新熟悉了多线程的相关内容,加深了对多线程知识的了解和用途的理解。

    收缩