完成跳关打实训

This commit is contained in:
huang 2017-08-30 17:30:32 +08:00
parent 61f2749d1b
commit 328e7236a9
5 changed files with 33 additions and 154 deletions

View File

@ -359,7 +359,9 @@ class GamesController < ApplicationController
# 自动推送下一个任务
def next_step
render_403 if @game.status != 2
unless show_next_stage?(@game, @myshixun.shixun.try(:status))
render_403
end
next_game = @game.next_game
next_game.update_attributes(:status => 0, :open_time => Time.now) if next_game.status == 3
respond_to do |format|

View File

@ -33,6 +33,18 @@ module ApplicationHelper
extend Forwardable
def_delegators :wiki_helper, :wikitoolbar_for, :heads_for_wiki_formatter
# 定义当前关卡是否有权开启下一关
# :实训若发布了,必须通过当前关卡才能查看下一关
# :未发布的实训,除了最后一关,其它的关卡都可以进入下一关
def show_next_stage?(game, shixun_status)
if game.is_final_game? || ([2,3].include?(shixun_status.to_i) && game.try(:statu) != 2)
false
else
true
end
end
# 适用与已经用url_safe编码后回调字符串形式
def tran_base64_decode64 str
if str.blank?

View File

@ -52,4 +52,9 @@ class Game < ActiveRecord::Base
output = outputs.blank? ? nil : outputs.first
return output
end
def is_final_game?
challenge = self.challenge
challenge.try(:position).to_i == challenge.shixun.challenges.count ? true : false
end
end

View File

@ -14,23 +14,20 @@
<div id="code_estimate">
<% if @game.status == 1 %>
<a class="shixun-task-btn mt8 mr15" id="code_testing">评测中..</a>
<% elsif @game.status == 2 %>
<% end %>
<% if show_next_stage?(@game, @myshixun.shixun.try(:status)) %>
<% if @had_done == 0 %>
<%= link_to "下一关 ", {:controller => 'games',
:action => "next_step", :id => @game,
:myshixun_id => @myshixun},
:class => "shixun-task-btn task-btn-blue mr15 mt8",
:id => "next_step",
:remote => true %>
<%= link_to "下一关 ", {:controller => 'games', :action => "next_step", :id => @game, :myshixun_id => @myshixun},
:class => "shixun-task-btn task-btn-blue mr15 mt8", :id => "next_step", :remote => true %>
<!--<a href="javascript:void(0);" onclick="shixun_next_step();" class="task-btn task-btn-blue mr15 mt8">下 一 步</a>-->
<% else %>
<a href="<%= shixun_path(@shixun) %>" id="exit_shixun" class="shixun-task-btn task-btn-blue mt8 mr15">退出实训</a>
<a href="<%= shixun_path(@myshixun.shixun) %>" id="exit_shixun" class="shixun-task-btn task-btn-blue mt8 mr15">退出实训</a>
<% end %>
<% end %>
</div>
<script>
// 如果是HTML实训则在效果显示栏实时渲染code
<% if @shixun.language == "Html" %>
<% if @myshixun.shixun.try(:language) == "Html" %>
setTimeout(tpi_html_show, 1000);
<% end %>
// 渲染用户的HTML的CODE。
@ -117,7 +114,7 @@
$("#code_estimate").html("<a href='<%= next_step_myshixun_game_path(@game, :myshixun_id => @myshixun) %>' class='task-btn task-btn-blue mr15 mt8' id='next_step' data-remote='true'>下一关</a>");
var htmlvalue = "<%= j (render :partial => 'games/pass_game_show', :locals => { :game=> @game, :myshixun => @myshixun, :had_done => 0}) %>";
}else{
$("#code_estimate").html("<a href='<%= shixun_path(@shixun) %>' class='task-btn task-btn-blue mt8 mr15' >退出实训</a>");
$("#code_estimate").html("<a href='<%= shixun_path(@myshixun.shixun) %>' class='task-btn task-btn-blue mt8 mr15' >退出实训</a>");
var htmlvalue = "<%= j (render :partial => 'games/pass_game_show', :locals => { :game => @game, :myshixun => @myshixun, :had_done => 1}) %>";
}
// 传递具体屏幕的宽高,实现不同浏览器与不同分辨率都能撑满屏幕
@ -131,7 +128,7 @@
if(0 == data.had_done){
$("#code_estimate").html("<a href='<%= next_step_myshixun_game_path(@game, :myshixun_id => @myshixun) %>' class='task-btn task-btn-blue mr15 mt8' id='next_step' data-remote='true'>下一关</a>");
}else if(1 == data.had_done ){
$("#code_estimate").html("<a href='<%= shixun_path(@shixun) %>' class='task-btn task-btn-blue mt8 mr15' >退出实训</a>");
$("#code_estimate").html("<a href='<%= shixun_path(@myshixun.shixun) %>' class='task-btn task-btn-blue mt8 mr15' >退出实训</a>");
}
}
@ -232,7 +229,7 @@
$("#code_estimate").html("<a href='<%= next_step_myshixun_game_path(@game, :myshixun_id => @myshixun) %>' class='task-btn task-btn-blue mr15 mt8' id='next_step' data-remote='true'>下一关</a>");
var htmlvalue = "<%= j (render :partial => 'games/pass_game_show', :locals => { :game=> @game, :myshixun => @myshixun, :had_done => 0}) %>";
}else{
$("#code_estimate").html("<a href='<%= shixun_path(@shixun) %>' class='task-btn task-btn-blue mt8 mr15' >退出实训</a>");
$("#code_estimate").html("<a href='<%= shixun_path(@myshixun.shixun) %>' class='task-btn task-btn-blue mt8 mr15' >退出实训</a>");
var htmlvalue = "<%= j (render :partial => 'games/pass_game_show', :locals => { :game=> @game, :myshixun => @myshixun, :had_done => 1}) %>";
}
// 传递具体屏幕的宽高,实现不同浏览器与不同分辨率都能撑满屏幕
@ -247,7 +244,7 @@
}else if(codeEstimate.trim() == "下一关"){
$("#code_estimate").html("<a href='<%= next_step_myshixun_game_path(@game, :myshixun_id => @myshixun) %>' class='task-btn task-btn-blue mr15 mt8' id='next_step' data-remote='true'>下一关</a>");
} else if(codeEstimate.trim() == "退出实训"){
$("#code_estimate").html("<a href='<%= shixun_path(@shixun) %>' class='task-btn task-btn-blue mt8 mr15' >退出实训</a>");
$("#code_estimate").html("<a href='<%= shixun_path(@myshixun.shixun) %>' class='task-btn task-btn-blue mt8 mr15' >退出实训</a>");
}
}
// 访问60次即120s后后台还未改变状态即执行

View File

@ -18,113 +18,10 @@
</ul>
<div class="cl"></div>
<div id="game_test_set_results" class="-flex -relative blacktab-inner"></div>
<script id="t:exec_results_1" type="text/html">
<div id="blacktab_con_1" class="" >
<! if(language == "Html") { !>
<div class="fit -scroll">
<div class="-layout-v -fit">
<div class="-flex -scroll task-padding16 loading-center undis" id="html_ajax_loading"></div>
<div class="-flex -scroll task-padding16" id="html_contents" style="background: #fff">
</div>
</div>
</div>
<! } !>
</div>
<div id="blacktab_con_2" class="<!= language == 'Html' ? 'undis' : '' !>" >
<div class="fit -scroll">
<div class="-layout-v -fit">
<div class="-flex -scroll task-padding16 loading-center undis" id="evaluating_ajax_loading">
<embed src='/images/bigdata/loading2.svg' />
</div>
<div class="-flex -scroll task-padding16" id="evaluating_contents">
<! if(had_test_count != "0") { !>
<! if(had_passed_testsests_error_count != "0") { !>
<p class="-text-danger mb10">
<i class="fa fa-exclamation-circle font-16" ></i><span class="ml5 mr5 -text-danger"><!= had_passed_testsests_error_count !>/<!= test_sets_count !></span> <!= latest_output !>
</p>
<! }else{ !>
<p class="color-light-green mb10">
<i class="fa fa-check-circle font-16" ></i><span class="ml5 mr5"><!= test_sets_count !>/<!= test_sets_count !></span> 全部通过
</p>
<! } !>
<! } !>
<! for(var i = 0; i < test_sets.length; i++ ) { !>
<div class="-task-ces-box mb15 clearfix">
<div class="-task-ces-top" onclick="toggle_test_case('<!= test_sets[i].is_public !>', '<!= i !>')" style="cursor:pointer">
<i class="fa fa-caret-right mr5 font-16" ></i>
<span class="font-14">测试集 <!= i + 1 !></span>
<! if( test_sets[i].result == 0 ) { !>
<i class="fa fa-exclamation-circle -text-danger fr mt8 ml5" ></i>
<! } !>
<! if( test_sets[i].result == 1 ) { !>
<i class="fa fa-check-circle color-light-green fr mt8 ml5 font-16" ></i>
<! } !>
<! if(test_sets[i].is_public == 0) { !>
<i class="fa fa-lock fr mt8" ></i>
<! } !>
</div>
<! if(test_sets[i].is_public == 1) { !>
<div class="-task-ces-info undis" id="test_case_<!= i !>">
<ul class="font-14">
<li class="clearfix"><div class="clearfix"><span class="-task-ces-info-left color-blue fl fb">测试输入:</span><p class="fl" style="width: 90%;"><!= test_sets[i].input == null ? "空" : test_sets[i].input.replace(/\r\n/g,"<br>") !></p></div></li>
<li class="clearfix"><div class="clearfix"><span class="-task-ces-info-left color-blue fl fb">预期输出:</span><p class="fl" style="width: 90%;"><!= test_sets[i].output == null ? "空" : test_sets[i].output.replace(/\r\n/g,"<br>") !></p></div></li>
<li class="clearfix"><div class="clearfix"><span class="-task-ces-info-left color-blue fl fb">实际输出:</span><p class="fl color-orange" style="width: 90%;"><!= test_sets[i].actual_output == null ? "空" : test_sets[i].actual_output.replace(/\r\n/g,"<br>") !></p></div></li>
</ul>
</div>
<! } !>
<! if(test_sets[i].is_public == 0) { !>
<div class="-task-ces-info undis" id="test_case_<!= i !>">
<ul class="font-14">
<li class="clearfix"><div class="clearfix"><p class="fl color-orange" style="width: 90%;margin-left: 34px;">此为隐藏测试项,暂不支持查看</p></div></li>
</ul>
</div>
<! } !>
</div>
<! } !>
</div>
</div>
</div>
</div>
<div id="blacktab_con_3" class="undis" >
<div class="fit -scroll">
<div class="-layout-v -fit">
<div class="-flex -scroll task-padding16 loading-center undis" id="info_ajax_loading">
<embed src='/images/bigdata/loading2.svg' />
</div>
<div class="-flex -scroll task-padding16" id="evaluating_info">
<! if(had_test_count != "0") { !>
<! if(had_passed_testsests_error_count != "0") { !>
<p class="-text-danger mb10">
<i class="fa fa-exclamation-circle font-16" ></i><span class="ml5 mr5 -text-danger"><!= had_passed_testsests_error_count !>/<!= test_sets_count !></span> <!= latest_output !>
</p>
<! }else{ !>
<p class="color-light-green mb10">
<i class="fa fa-check-circle font-16 " ></i><span class="ml5 mr5"><!= test_sets_count !>/<!= test_sets_count !></span> 全部通过
</p>
<! } !>
<! } !>
<div class="-task-ces-box mb10 clearfix">
<div class="-task-ces-info">
<ul>
<li><span class="-task-ces-info-left ">公开测试:</span><span class="color-light-green"><!= had_passed_testsests_public_count !>/<!= test_sets_public_count !></span></li>
<li><span class="-task-ces-info-left">隐藏测试:</span><span class="color-light-green"><!= had_passed_testsests_hidden_count !>/<!= test_sets_hidden_count !></span></li>
<li><span class="-task-ces-info-left">经验值:</span><span class="color-light-green" id="experience_value">+ <!= final_score !></span></li>
<li><span class="-task-ces-info-left">金币:</span><span class="color-light-green" id="grade_value">+ <!= final_score !></span></li>
</ul>
</div>
</div>
</div>
</div>
</div>
</div>
</script>
<script>
// test_sets测试集had_test_count输出集的个数test_sets_count测试集的个数had_passed_testsests_error_count测试集报错数test_sets_hidden_count隐藏测试集的个数
// test_sets_public_count公开测试集的个人had_passed_testsests_hidden_count通过的隐藏集个数had_passed_testsests_public_count通过的公开测试集个数
// final_score最终得分had_done通过的是否是最后一关latest_output最新的输出language实训的语言
<%# test_sets测试集had_test_count输出集的个数test_sets_count测试集的个数had_passed_testsests_error_count测试集报错数test_sets_hidden_count隐藏测试集的个数 %>
<%# test_sets_public_count公开测试集的个人had_passed_testsests_hidden_count通过的隐藏集个数had_passed_testsests_public_count通过的公开测试集个数 %>
<%# final_score最终得分had_done通过的是否是最后一关latest_output最新的输出language实训的语言 %>
$(function(){
code_evaluation(
[<%= @test_sets.html_safe unless @test_sets.blank? %>],
@ -142,34 +39,6 @@
$("#blacktab_nav_1").trigger("click");
});
/* var bt = baidu.template;
bt.LEFT_DELIMITER = '<!';
bt.RIGHT_DELIMITER = '!>';
bt.ESCAPE = false;
$(function(){
// console.log("<%#= @public_test_sets.join(',').html_safe %>");
var html = bt('t:exec_results_1',{
test_sets: [<%#= @test_sets.html_safe unless @test_sets.blank? %>],
// hide_test_sets: [<%#= @private_test_sets.html_safe unless @private_test_sets.blank? %>]
had_test_count: '<%#= @had_test_count %>',
test_sets_count: '<%#= @test_sets_count %>',
had_passed_testsests_error_count: '<%#= @had_passed_testsests_error_count %>',
test_sets_hidden_count : '<%#= @test_sets_hidden_count %>',
test_sets_public_count: '<%#= @test_sets_public_count %>',
had_passed_testsests_hidden_count: '<%#= @had_passed_testsests_hidden_count %>',
had_passed_testsests_public_count: '<%#= @had_passed_testsests_public_count %>',
final_score: '<%#= @final_score %>',
had_done: '<%#= @had_done %>',
latest_output: [<%#= @latest_output.html_safe unless @latest_output.blank? %>],
language: '<%#= @language %>'
}
);
$("#game_test_set_results").html(html);
$("#blacktab_nav_1").trigger("click");
});*/
function g_new(o){return document.getElementById(o);}
function HoverLi(n){
for(var i=1;i<=3;i++){
@ -179,10 +48,4 @@
g_new('blacktab_con_'+n).className='dis';
g_new('blacktab_nav_'+n).className='blacktab_hover';
}
/*allClassName---------------同一块tab共有的类名同时对应的显示块ID要等于类名加上"_"在加上块的位置)
* addClassName---------------点击tab需要添加的样式类
* item-----------------------点击的当前tab元素
* */
</script>