C#课程设计

原创 2015年06月27日 20:45:29

开发过程

  首先说明,整个程序没有用C#进行开发,我采用了JavaScript(JS)来做。因为最近在学习JS,却没有什么真正做一个小程序的欲望,没时间也是一个方面,一直忙着考试和课程设计。这两天考完试,就试着把这个程序做出来,顺便练一练手。
  好了,废话就不扯了,直接入正题,根据程序要求分析一下程序的实现。程序要求我们分辨三张图片,在三张图片中,根据姓名选出正确的图片。要求很简单,接着我们来分析一下应该怎么去实现它。首先,很显然,我们需要从一堆图片,即图片库中选出三张图片来开始游戏,这个过程可以这样理解,利用随机数,随机从图片库中抽取一张图片,然后将这张图片维护在一个数据结构中,将这个过程重复三次,我们就得到了想要的图片的集合。但这个过程有个问题,那就是这三次抽取有可能抽到一样的图片,就会出现两张重复图片或者三张重复图片的bug。要解决这个问题要求我们选取恰当的数据结构来储存抽取出来的图片,从上面的描述中,我们可以知道这个数据结构应该能够禁止添加重复的元素。根据这个条件,我们知道Set就满足了我们需求,但接着我就发现了一个问题,虽然在一些主流的高级语言之中,比如Java和c#都提供了自己原生的Set的API,但是,JS是一种极端依赖浏览器的编程语言,不同的浏览器有可能实现了不同的JS标准,Set的API现在还没有在所有的浏览器中实现,所以不能用原生的API来解决问题。没办法,只能自己取巧去实现它。每次抽取图片后,在储存这张图片时,都先做个判断,如果在储存的集合中发现有相同的图片,就重新抽取一张,直到选到不同的图片为止。这个过程其实有一定的性能问题,因为做了额外的判断操作,不过考虑到每次比较最多只是和两个元素比较,可以忽略它。解决了重复问题之后,我们就要想一想图片对应的姓名问题了。因为图片和姓名明显是两个独立的元素,怎么让一张图片和一个姓名对应起来呢?最快捷的方法,使用对象,现在大部分语言都支持面向对象的编程,构建一个对象包含图片路径和名字两个字段,这样就可以解决问题。接着就是从三个对象中选出一个作为答案。最后就是判断了,判断正确与否。这样整个流程分析下来,条理就很清晰了。照着这个思路来,几个小时肯定可以完成了。因为第一次写JS,很多东西不是很了解,最后弄了一个上午才把代码折腾出来。

学习与收获

  第一次真正动手写JS,感觉很生疏,虽然思路一开始就很清晰,可是很多时间都是在查资料,查一点写一点,龟速前行。写完之后,有了以下的总结:

  1. 差异性大。一开始是打算直接用JS的Set的,不过查文档之后,发现只有部分浏览器实现了,测试中用IE11可以直接调用Set,不过用一些国内的浏览器,比如搜狗就报错了。所以有志做前端的,应该了解浏览器之间的差异,做好兼容性的工作。
  2. 程序运行时序。和一般应用不一样,JS程序的触发是打开一个网页,而网页本身就有一个加载的过程。那么JS是在什么时候执行的?一打开页面就执行?还是当内容加载完再执行?老实说,我到现在还是有点迷糊。调试过程中,发现程序是在页面没加载内容就开始执行了,不过调用JQuery的ready函数后,程序开始执行的时间变成页面加载完之后再执行。
  3. 代码模块化管理。之前一直写Java,Java中有包的概念,可以方便的对代码分类管理。比如常量可以单独建一个文件,然后把文件放在一个包中。在JS中就不知道怎么实现了,JS本质上是一种脚步语言,它方便简单,不过管理貌似有点难。我在程序中的常量都写在同一个文件中,代码看起来很臃肿。不知道怎么改进。

感受与体会

  JS还是很好玩的,特别是弱类型的设定,一个var解决所有问题。但是总的来说,因为生疏的原因吧,还是很不习惯,特别不能对代码分包管理这点上。另外函数式编程的感觉也不是太好,还是不习惯啊,以后再多多练习。

代码分析

//省略了常量的定义,可在源码中看。
//定义类,用来做权重
function Person(){}
Person.prototype.times = 0;
Person.prototype.name = "";

//对象数组
var initData = function() {
    var persons = new Array(URLS.length);
    for (var i = 0; i < URLS.length; i++) {
        var person = new Person();
        person.name = URLS[i];
        persons[i] = person;
    }
    return persons;
}
var DATAS = initData();

//匹配中文
var pattern = /\d+[\u4e00-\u9fa5]+/;
var pattern_cn = /[\u4e00-\u9fa5]+/;
var matches = pattern.exec( URLS[0]);

//选三个
var getArrs = function(urls){
    var temp = new Array(3);
    for(var i=0;i<3;i++){
        var s = urls[Math.floor(Math.random()*urls.length)];
        while(temp.indexOf(s)!=-1 && temp.length>0){
            var s = urls[Math.floor(Math.random()*urls.length)];
        }
       temp[i] = s;
    }
    return temp;
}

//重新开始
var reStart = function(){
    //假设游戏时间足够长,所有人都认识,此时数组元素只剩下很少,这时就重置数组,确保游戏可以继续
    if(DATAS.length<6){
        DATAS = initData();
    }
    var temp = new Array(3);
    for(var i=0;i<3;i++){
        var s = DATAS[Math.floor(Math.random()*DATAS.length)].name;
        while(temp.indexOf(s)!=-1 && temp.length>0){
            var s = DATAS[Math.floor(Math.random()*DATAS.length)].name;
        }
        temp[i] = s;
    }
    $(".left img").attr("src",temp[0]);
    $(".middle img").attr("src",temp[1]);
    $(".right img").attr("src",temp[2]);
    $(".container:last span").text(pattern_cn.exec(temp[Math.floor(Math.random() * temp.length)]));
    console.log(DATAS);
    console.log(DATAS.length);
}


$(document).ready(function(){
    //第一次打开
  var init = function() {
      var mSet = getArrs(URLS);
      var img_left = $("<img/>").attr("src", mSet[0]);
      $(".left").append(img_left);
      var img_mid = $("<img/>").attr("src", mSet[1]);
      $(".middle").append(img_mid);
      var img_right = $("<img/>").attr("src", mSet[2]);
      $(".right").append(img_right);
      var index = Math.floor(Math.random() * mSet.length);
      DATAS[index].times++;
      var name = $("<span></span>").text(pattern_cn.exec(mSet[index]));
      name.addClass("label label-success");
      $(".container:last h4").append(name);
      return name;
  }
    var name_label = init();

    //点击事件
    $(".left").click(function(){
        //alert(URLS.indexOf($(".left img").attr("src")));
        if(pattern_cn.exec($(".left img").attr("src")) == name_label.text()){
            //每次猜中就将对象中猜中次数增加1次,如果超过5次,表示你已认识此人,将对象从数组中删除,以后不会再出现
            DATAS[URLS.indexOf($(".left img").attr("src"))].times++;
            if(DATAS[URLS.indexOf($(".left img").attr("src"))].times>5) {
                DATAS.splice(URLS.indexOf($(".left img").attr("src")), 1);
            }
            alert("你猜对了!再玩一次。");
            reStart();
        }else{
            alert("你猜错了!重新再来。");
            reStart();
        }
    });

    $(".middle").click(function(){
        //alert(URLS.indexOf($(".middle img").attr("src")));
       if(pattern_cn.exec($(".middle img").attr("src")) == name_label.text()){
           DATAS[URLS.indexOf($(".middle img").attr("src"))].times++;
           if(DATAS[URLS.indexOf($(".middle img").attr("src"))].times>5) {
               DATAS.splice(URLS.indexOf($(".middle img").attr("src")), 1);
           }
           alert("你猜对了!再玩一次。");
           reStart();
       }else{
           alert("你猜错了!重新再来。");
           reStart();
       }
    });

    $(".right").click(function(){
        //alert(URLS.indexOf($(".right img").attr("src")));
        if(pattern_cn.exec($(".right img").attr("src")) == name_label.text()){
            DATAS[URLS.indexOf($(".right img").attr("src"))].times++;
            if(DATAS[URLS.indexOf($(".right img").attr("src"))].times>5) {
                DATAS.splice(URLS.indexOf($(".right img").attr("src")), 1);
            }
            alert("你猜对了!再玩一次。");
            reStart();
        }else{
            alert("你猜错了!重新再来。");
            reStart();
        }
    });
});

运行结果

程序网盘地址http://pan.baidu.com/s/1jG5rOoA

相关文章推荐

C#课程设计

C#开发收获与心得 光阴似箭,一个学期已经到了末尾。这个学期是我在大学以来收获最大的一个学期,让我学会了很多作为一个大学生应该拥有的一些基础的技能。大学以来都是蒙蒙混混过,但是这学期第一节c#课让我...
  • fraddy
  • fraddy
  • 2015年07月06日 23:32
  • 572

Delphi7高级应用开发随书源码

  • 2003年04月30日 00:00
  • 676KB
  • 下载

Delphi7高级应用开发随书源码

  • 2003年04月30日 00:00
  • 676KB
  • 下载

asp.net,java,jsp,安卓Android,苹果ios,php,vb.net,c#免费毕业课程设计源码共享网盘下载

百度网盘下载地址1:  http://pan.baidu.com/s/1o67fybC 百度网盘下载地址2: http://pan.baidu.com/s/1kTxckmF 163网盘下载地址:h...

Delphi7高级应用开发随书源码

  • 2003年04月30日 00:00
  • 676KB
  • 下载

Delphi7高级应用开发随书源码

  • 2003年04月30日 00:00
  • 676KB
  • 下载

C#课程设计:《猜猜看》游戏开发总结

信管1121,201211671117,聂双燕 第一部分:开发要求(完整要求见课程考核说明编程组和游戏说明) 1. 随机显示 一个名字 与 3张相片,选择正确的相片; 2. 随机显示 一张相片 ...

用C#实现一个简单的图书管理系统(课程设计)

用C#实现一个简单的图书管理系统(课程设计) 学校的数据库课程结束了,要求完成一个课程设计,我选择用C#实现一个简单的图书管理系统(ADO.NET),其中我自己封装了一个SqlHelper类简化数据库...

asp.net,java,jsp,安卓Android,php,vb.net,c#/c++免费毕业课程设计源码共享下载

本人多年工作经验的软件工程师,建立具有多个工程师的百淘设计团队,专业代做计算机专业毕业程序设计,现有如下成品 如有需要可以联系我的QQ1:1220177354,QQ2:3203611604欢迎广大学...

【C#】课程设计——贪吃蛇(可调节蛇的速度)

该帖函数方面参考网上的教程,参考的东西也比较多,具体实现难度不大,大概的思路如步骤2。仅供交流参考。 步骤1:界面的布局 步骤2:具体实现的主要函数...
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:C#课程设计
举报原因:
原因补充:

(最多只允许输入30个字)