免费注册 查看新帖 |

Chinaunix

  平台 论坛 博客 文库
123下一页
最近访问板块 发新帖
查看: 11908 | 回复: 25
打印 上一主题 下一主题

perl写的ajax扫雷 [复制链接]

论坛徽章:
0
跳转到指定楼层
1 [收藏(0)] [报告]
发表于 2007-04-20 00:12 |只看该作者 |倒序浏览
www.zhekouju.cn/cgi-bin/mine.cgi

源码在调试一些bug后很快将放在网上,有注释哦,呵呵:)

论坛徽章:
0
2 [报告]
发表于 2007-04-20 08:30 |只看该作者
不错。。。

论坛徽章:
0
3 [报告]
发表于 2007-04-20 08:51 |只看该作者
支持!期待!

论坛徽章:
0
4 [报告]
发表于 2007-04-20 09:28 |只看该作者
超强

论坛徽章:
0
5 [报告]
发表于 2007-04-21 00:23 |只看该作者
功能不错。但是反映很慢,不知道是什么原因?

论坛徽章:
0
6 [报告]
发表于 2007-04-21 00:33 |只看该作者
不错。但确实比较慢,不知是网速问题还是程序问题?

论坛徽章:
0
7 [报告]
发表于 2007-04-21 00:40 |只看该作者

一部分代码,整理后我在放上来吧

  1. #!/usr/bin/perl
  2. use lib "../lib";
  3. use Utility;
  4. use IpUtility;
  5. use constant TMPL_FILE => '../tmpl/mine.html';
  6. use strict;
  7. use CGI::Carp qw(fatalsToBrowser);
  8. use CGI::Session;
  9. use constant NUMBER_BY_PAGE => 10;
  10. use Date::Calc;

  11. &main;

  12. #[url]www.zhekouju.cn[/url]
  13. #author:Jiang shenli
  14. #e-mail:jiangshenli@hotmail.com

  15. # 3-dimension-structure
  16. #a->[x][y][0] indicates if the cell is mine:  0->no  1->yes
  17. #a->[x][y][1] indicates if how many mines around
  18. #a->[x][y][2] indicates if the display state of the cell: 0->not yet shown  1->shown 2->flaged

  19. sub main() {
  20.         eval {
  21.                 my $dbh     = db_connect();
  22.                 my $query   = new CGI;
  23.                 my $data    = format_to_hash($query);
  24.                 my $session = new CGI::Session();

  25.                 if ( defined( $data->{submit_new_review} ) ) {
  26.                         my $sth_insert =
  27.                           $dbh->prepare(
  28. "insert into guest_review_board (content,user_name,record_time,board) values (?,?,now(),1)"
  29.                           );
  30.                         $sth_insert->execute( $data->{content}, $data->{user_name} );
  31.                         print $query->redirect( $ENV{SCRIPT_NAME} );
  32.                         return;

  33.                 }

  34.                 #                handle right click event
  35.                 elsif ( defined( $data->{sent_right} ) ) {
  36.                         print $query->header( { -type => 'text/html;charset=utf-8' } );
  37.                         my ( $x, $y ) = split( ',', $data->{sent_right} );
  38.                         print '{';
  39.                         $data->{a} = $session->param('map') ;
  40.                         $data->{a}->[$x][$y][2] = 2 - $data->{a}->[$x][$y][2];
  41.                         print 'result:[' . $x . ',' . $y . ','
  42.                           . $data->{a}->[$x][$y][2] . '],';
  43.                         print "nothing:'nothing'}";
  44.                         $session->param( 'map', $data->{a} );
  45. #                        &nice_print($data);
  46.                         return;
  47.                 }

  48.                 #                handle left click event
  49.                 elsif ( defined( $data->{sent_left} ) ) {
  50.                         if ( defined( $session->param('if_start') )
  51.                                 and ( $session->param('if_start') eq 'yes' ) )
  52.                         {

  53.                                 #                        hande the non-first click event
  54.                                 $data->{a} = $session->param('map') ;
  55.                                 my ( $x, $y ) = split( ',', $data->{sent_left} );
  56.                                 $data->{result} = '{';
  57.                                 if ( $data->{a}->[$x][$y][0] == 1 ) {
  58.                                         $data->{result} = $data->{result} . "state:'failed',";
  59.                                         $data->{result} =
  60.                                           $data->{result} . &get_leavings_for_failure($data);
  61.                                           $data->{result}=$data->{result}.'wrongX:'.$x.',wrongY:'.$y.',';
  62.                                 }
  63.                                 else {
  64.                                         $data->{result} = $data->{result} . &show( $data, $x, $y );
  65.                                         if ( if_success($data) ) {
  66.                                                 $data->{result} = $data->{result} . "state:'win',";
  67.                                                 my @now = Date::Calc::Today_and_Now();
  68.                                                 my @t=Date::Calc::Delta_YMDHMS(@{$session->param('time')},@now);
  69.                                                 $data->{result} = $data->{result} . 'hour:'.$t[3].',';
  70.                                                 $data->{result} = $data->{result} . 'minute:'.$t[4].',';
  71.                                                 $data->{result} = $data->{result} . 'second:'.$t[5].',';
  72.                                                
  73.                                                
  74.                                                 $data->{result} =
  75.                                                   $data->{result} . &get_leavings($data);
  76.                                         }
  77.                                         else {
  78.                                                 $data->{result} = $data->{result} . "state:'continue',";
  79.                                         }
  80.                                 }
  81.                                 $data->{result} = $data->{result} . "nothing:'nothing'}";
  82.                                 $session->param( 'map', $data->{a} );
  83.                                 print $query->header( { -type => 'text/html; charset=utf-8' } );
  84.                                 print $data->{result};
  85.                                 return;
  86.                         }
  87.                         else {

  88.                                 #                        hande the first click event
  89.                                 my @now = Date::Calc::Today_and_Now();
  90.                                 $session->param('time', \@now);
  91.                                 $session->param( 'if_start', 'yes' );
  92.                                 my ( $x, $y ) = split( ',', $data->{sent_left} );
  93.                                 $data->{result} = '{';
  94.                                 $data->{a} = $session->param('map') ;
  95.                                 &init( $data, $x, $y );
  96.                                 $data->{result} = $data->{result} . &show( $data, $x, $y );
  97.                                 if ( if_success($data) ) {
  98.                                         $data->{result} = $data->{result} . "state:'win',";
  99.                                                                                         my @now = Date::Calc::Today_and_Now();
  100.                                                 my @t=Date::Calc::Delta_YMDHMS(@{$session->param('time')},@now);
  101.                                                 $data->{result} = $data->{result} . 'hour:'.$t[3].',';
  102.                                                 $data->{result} = $data->{result} . 'minute:'.$t[4].',';
  103.                                                 $data->{result} = $data->{result} . 'second:'.$t[5].',';
  104.                                         $data->{result} = $data->{result} . &get_leavings($data);
  105.                                 }
  106.                                 else {
  107.                                         $data->{result} = $data->{result} . "state:'continue',";
  108.                                 }
  109.                                 $data->{result} = $data->{result} . "nothing:'nothing'}";
  110.                                 $session->param( 'map', $data->{a} );
  111.                                 print $query->header( { -type => 'text/html; charset=utf-8' } );
  112.                                 print $data->{result};
  113.                                 return;
  114.                         }
  115.                 }

  116.                 #                initialization request
  117.                 &init_init($data);
  118.                 $session->param( 'if_start', 'no' );
  119.                 $session->param( 'map',      $data->{a} );

  120.                 my $sth_select_all =
  121.                   $dbh->prepare(
  122. "select count(*) as 'total_reviews'  from guest_review_board where del_flag=0"
  123.                   );
  124.                 $sth_select_all->execute();
  125.                 my $total_reviews =
  126.                   ( $sth_select_all->fetchrow_hashref()->{total_reviews} );
  127.                 $data->{total_pages} =
  128.                   int( ( $total_reviews + NUMBER_BY_PAGE - 1 ) / NUMBER_BY_PAGE );
  129.                 $data->{page}      = 1 unless defined( $data->{page} );
  130.                 $data->{next_page} = $data->{page} + 1;
  131.                 $data->{next_page} = 0 if $data->{next_page} > $data->{total_pages};
  132.                 $data->{pre_page}  = $data->{page} - 1;
  133.                 $data->{pre_page}  = 0 if $data->{pre_page} < 1;

  134.                 my $sth_get_reviews =
  135.                   $dbh->prepare(
  136. "select content,record_time,user_name from guest_review_board where board=1 order by record_time desc limit "
  137.                           . ( ( $data->{page} - 1 ) * 10 )
  138.                           . ",10 " );
  139.                 $sth_get_reviews->execute();
  140.                 my @temp_reviews;
  141.                 while ( my $temp_review = $sth_get_reviews->fetchrow_hashref() ) {
  142.                         push @temp_reviews, $temp_review;
  143.                 }
  144.                 $data->{reviews} = \@temp_reviews;
  145.                 $data->{ip}      = $ENV{'REMOTE_ADDR'};
  146.                 $data->{ip}      = &getIpAddress( $ENV{'REMOTE_ADDR'} );

  147.                 my $cookie = $query->cookie(
  148.                         -name  => $session->name,
  149.                         -value => $session->id
  150.                 );
  151.                 print $query->header(
  152.                         { -cookie => $cookie, -type => 'text/html; charset=utf-8' } );
  153.                 print_page_without_header( TMPL_FILE, $data );
  154.            

  155.        
  156.         };
  157.         die $@ if $@;
  158. }

  159. #test if you have won:
  160. #the way is to test if all the non-mine cell is shown
  161. sub if_success() {
  162.         my $data = shift;
  163.         for ( my $i = 1 ; $i <= $data->{height} ; $i++ ) {
  164.                 for ( my $j = 1 ; $j <= $data->{width} ; $j++ ) {
  165.                         if ( $data->{a}->[$i][$j][0] == 0 and $data->{a}->[$i][$j][2] != 1 )
  166.                         {
  167.                                 return 0;
  168.                         }
  169.                 }
  170.         }
  171.         return 1;
  172. }

  173. #the initialization before your first click ,assume there are no mines
  174. #there will be mines after your first click
  175. #default: there are 10 X 10 cells and 10 mines,you can change it by import specific parameter of url
  176. sub init_init() {
  177.         my $data = shift;
  178.         $data->{width} = 10 unless defined( $data->{width} ) and $data->{width} > 0;
  179.         $data->{height} = 10
  180.           unless defined( $data->{height} )
  181.           and $data->{height} > 0;
  182.           $data->{mine_number} = 20
  183.           unless defined( $data->{mine_number} )
  184.           and $data->{mine_number} > 0;
  185.           $data->{mine_number} = int($data->{height}* $data->{width}/2)
  186.           unless defined( $data->{mine_number})
  187.           and $data->{mine_number}<$data->{height}* $data->{width}
  188.           and $data->{mine_number} > 0;          
  189.           
  190.           
  191.         for ( my $i = 0 ; $i <= $data->{height} + 1 ; $i++ ) {
  192.                 for ( my $j = 0 ; $j <= $data->{width} + 1 ; $j++ ) {
  193.                         $data->{a}->[$i][$j] = [ 0, 0, 0 ];
  194.                 }
  195.         }
  196. }

  197. #if win,get the leavings mine
  198. sub get_leavings() {
  199.         my $data = shift;
  200.         my $temp = 'leaving:[';
  201.         for ( my $i = 1 ; $i <= $data->{height} ; $i++ ) {
  202.                 for ( my $j = 1 ; $j <= $data->{width} ; $j++ ) {

  203.                         #                        if it is mine and has not been shown
  204.                         if ( $data->{a}->[$i][$j][0] == 1 and $data->{a}->[$i][$j][2] == 0 )
  205.                         {
  206.                                 $data->{a}->[$i][$j][2] = 2;
  207.                                 $temp = $temp . '[' . $i . ',' . $j . '],';
  208.                         }
  209.                 }
  210.         }
  211.         $temp =~ s/,$//;
  212.         $temp = $temp . '],';
  213.         return $temp || '';

  214. }

  215. #if fail,get the leavings mine and give the wrong flag information
  216. sub get_leavings_for_failure() {
  217.         my $data = shift;
  218.         my $temp = 'leaving:[';
  219.         for ( my $i = 1 ; $i <= $data->{height} ; $i++ ) {
  220.                 for ( my $j = 1 ; $j <= $data->{width} ; $j++ ) {

  221.                         #                        if it is mine and has not been shown
  222.                         if ( $data->{a}->[$i][$j][0] == 1 ) {
  223.                                         $temp = $temp . '[' . $i . ',' . $j . ',0],';#1 -> it is mine
  224.                         }
  225.                         if( $data->{a}->[$i][$j][0] == 0 && $data->{a}->[$i][$j][2] == 2) {
  226.                                         $temp = $temp . '[' . $i . ',' . $j . ',2],';#2-> it is not mine but you thought it was
  227.                         }
  228.                 }
  229.         }
  230.         $temp =~ s/,$//;
  231.         $temp = $temp . '],';
  232.         return $temp || '';

  233. }

  234. #the initialization after your first click
  235. sub init() {
  236.         my $data  = shift;
  237.         my $x     = shift;
  238.         my $y     = shift;
  239.         my $total = $data->{width} * $data->{height};
  240.        
  241.         my @array = ( 0 .. $total-1 );
  242.         ( $array[ ( $x - 1 ) * $data->{width} + $y - 1 ], $array[ $total-1  ] ) =
  243.           ( $array[ $total - 1 ], $array[ ( $x - 1 ) * $data->{width} + $y - 1 ] );
  244.         my $current = $total - 1;
  245.         for (
  246.                 my $i = $current - 1 ;
  247.                 $i >= $total - 1 - 1 - $data->{mine_number} + 1 ;
  248.                 $i--
  249.           )
  250.         {
  251.                 my $r = int( rand($current) );
  252.                 ( $array[$r], $array[ $i ] ) =
  253.                   ( $array[ $i ], $array[$r] );
  254.                 $current--;
  255.         }

  256.         for (
  257.                 my $j = $total - 1 - 1 - $data->{mine_number} + 1 ;
  258.                 $j <= $total - 1 - 1 ;
  259.                 $j++
  260.           )
  261.         {
  262.                 $data->{a}->[ int( $array[$j] / $data->{width} ) + 1 ]
  263.                   [ $array[$j] % $data->{width} + 1 ][0] = 1;
  264.         }
  265.         for ( my $i = 1 ; $i <= $data->{height} ; $i++ ) {
  266.                 for ( my $j = 1 ; $j <= $data->{width} ; $j++ ) {
  267.                         $data->{a}->[$i][$j][1] =
  268.                           $data->{a}->[ $i - 1 ][ $j - 1 ][0] +
  269.                           $data->{a}->[ $i - 1 ][$j][0] +
  270.                           $data->{a}->[ $i - 1 ][ $j + 1 ][0] +
  271.                           $data->{a}->[ $i + 1 ][ $j - 1 ][0] +
  272.                           $data->{a}->[ $i + 1 ][$j][0] +
  273.                           $data->{a}->[ $i + 1 ][ $j + 1 ][0] +
  274.                           $data->{a}->[$i][ $j - 1 ][0] + $data->{a}->[$i][ $j + 1 ][0];
  275.                 }
  276.         }

  277. }

  278. #change the mine map state from array to string(to be saved by session)
  279. #discarded because perl can traslate a reference to a string automatically
  280. #but it is useful if you want to use other language
  281. #sub toString() {
  282. ##        open TTT,">string_print.txt";
  283. ##        select TTT;
  284. #        my $data   = shift;
  285. #        my $string = '';
  286. #        for ( my $i = 1 ; $i <= $data->{height} ; $i++ ) {
  287. #                for ( my $j = 1 ; $j <= $data->{width} ; $j++ ) {
  288. #                        $string =
  289. #                            $string . $i . ',' . $j . ','
  290. #                          . $data->{a}->[$i][$j][0] . ','
  291. #                          . $data->{a}->[$i][$j][1] . ','
  292. #                          . $data->{a}->[$i][$j][2] . ';';
  293. #                }
  294. #        }
  295. ##        print $string;
  296. ##        select STDOUT;
  297. ##        close TTT;
  298. #        return $string;
  299. #}

  300. #change the mine map state from string(get from session) to array
  301. #discarded because perl can traslate a reference to a string automatically
  302. #but it is useful if you want to use other language
  303. #sub toArray() {
  304. #        my $string = shift;
  305. #        my $a      = [ [] ];
  306. #        my @array1 = split( ';', $string );
  307. #        for ( my $i = 0 ; $i < scalar(@array1) ; $i++ ) {
  308. #                my @array2 = split( ',', $array1[$i] );
  309. #                $a->[ $array2[0] ][ $array2[1] ] =
  310. #                  [ $array2[2], $array2[3], $array2[4] ];
  311. #        }
  312. #        return $a;
  313. #}

  314. #print the state map,just for debug
  315. sub nice_print() {
  316.         open TTT,">array_print.txt";
  317.         select TTT;
  318.         my $data = shift;
  319.         print "\n";
  320.         for ( my $i = 1 ; $i <= $data->{height} ; $i++ ) {
  321.                 for ( my $j = 1 ; $j <= $data->{width} ; $j++ ) {
  322.                         print $data->{a}->[$i][$j][0] . ' ';
  323.                 }
  324.                 print '         ';
  325.                 for ( my $j = 1 ; $j <= $data->{width} ; $j++ ) {
  326.                         print $data->{a}->[$i][$j][1] . ' ';
  327.                 }
  328.                 print '         ';
  329.                 for ( my $j = 1 ; $j <= $data->{width} ; $j++ ) {
  330.                         print $data->{a}->[$i][$j][2] . ' ';
  331.                 }
  332.                 print "\n";
  333.         }
  334.         select STDOUT;
  335.         close TTT;
  336. }

  337. # handle the left click event
  338. sub show() {
  339.         my $data = shift;
  340.         my $x    = shift;
  341.         my $y    = shift;
  342.         $data->{temp_result}    = 'result:[';
  343.         $data->{a}->[$x][$y][2] = 1;
  344.         $data->{temp_result}    =
  345.             $data->{temp_result} . '[' . $x . ',' . $y . ','
  346.           . $data->{a}->[$x][$y][1] . '],';
  347.         if ( $data->{a}->[$x][$y][1] == 0 ) {
  348.                 _clear_more( $data, $x, $y );
  349.         }
  350.         $data->{temp_result} =~ s/,$//;
  351.         $data->{temp_result} = $data->{temp_result} . '],';
  352.         return $data->{temp_result} || '';
  353. }

  354. sub _clear_more() {
  355.         my $data = shift;
  356.         my $x    = shift;
  357.         my $y    = shift;
  358.         if (    $x - 1 >= 1
  359.                 and $y - 1 >= 1
  360.                 and $data->{a}->[ $x - 1 ][ $y - 1 ][2] == 0 )
  361.         {
  362.                 $data->{a}->[ $x - 1 ][ $y - 1 ][2] = 1;
  363.                 $data->{temp_result} =
  364.                     $data->{temp_result} . '['
  365.                   . ( $x - 1 ) . ','
  366.                   . ( $y - 1 ) . ','
  367.                   . $data->{a}->[ $x - 1 ][ $y - 1 ][1] . '],';
  368.                 if ( $data->{a}->[ $x - 1 ][ $y - 1 ][1] == 0 ) {
  369.                         &_clear_more( $data, $x - 1, $y - 1 );
  370.                 }
  371.         }
  372.         if (    $x - 1 >= 1
  373.                 and $data->{a}->[ $x - 1 ][$y][2] == 0 )
  374.         {
  375.                 $data->{a}->[ $x - 1 ][$y][2] = 1;
  376.                 $data->{temp_result} =
  377.                     $data->{temp_result} . '['
  378.                   . ( $x - 1 ) . ','
  379.                   . $y . ','
  380.                   . $data->{a}->[ $x - 1 ][$y][1] . '],';
  381.                 if ( $data->{a}->[ $x - 1 ][$y][1] == 0 ) {
  382.                         &_clear_more( $data, $x - 1, $y );
  383.                 }
  384.         }
  385.         if (    $x - 1 >= 1
  386.                 and $y + 1 <= $data->{width}
  387.                 and $data->{a}->[ $x - 1 ][ $y + 1 ][2] == 0 )
  388.         {
  389.                 $data->{a}->[ $x - 1 ][ $y + 1 ][2] = 1;
  390.                 $data->{temp_result} =
  391.                     $data->{temp_result} . '['
  392.                   . ( $x - 1 ) . ','
  393.                   . ( $y + 1 ) . ','
  394.                   . $data->{a}->[ $x - 1 ][ $y + 1 ][1] . '],';
  395.                 if ( $data->{a}->[ $x - 1 ][ $y + 1 ][1] == 0 ) {
  396.                         &_clear_more( $data, $x - 1, $y + 1 );
  397.                 }
  398.         }
  399.         if (    $y - 1 >= 1
  400.                 and $data->{a}->[$x][ $y - 1 ][2] == 0 )
  401.         {
  402.                 $data->{a}->[$x][ $y - 1 ][2] = 1;
  403.                 $data->{temp_result} =
  404.                     $data->{temp_result} . '[' . $x . ','
  405.                   . ( $y - 1 ) . ','
  406.                   . $data->{a}->[$x][ $y - 1 ][1] . '],';
  407.                 if ( $data->{a}->[$x][ $y - 1 ][1] == 0 ) {
  408.                         &_clear_more( $data, $x, $y - 1 );
  409.                 }
  410.         }
  411.         if (    $y + 1 <= $data->{width}
  412.                 and $data->{a}->[$x][ $y + 1 ][2] == 0 )
  413.         {
  414.                 $data->{a}->[$x][ $y + 1 ][2] = 1;
  415.                 $data->{temp_result} =
  416.                     $data->{temp_result} . '[' . $x . ','
  417.                   . ( $y + 1 ) . ','
  418.                   . $data->{a}->[$x][ $y + 1 ][1] . '],';
  419.                 if ( $data->{a}->[$x][ $y + 1 ][1] == 0 ) {
  420.                         &_clear_more( $data, $x, $y + 1 );
  421.                 }
  422.         }
  423.         if (    $x + 1 <= $data->{height}
  424.                 and $y - 1 >= 1
  425.                 and $data->{a}->[ $x + 1 ][ $y - 1 ][2] == 0 )
  426.         {
  427.                 $data->{a}->[ $x + 1 ][ $y - 1 ][2] = 1;
  428.                 $data->{temp_result} =
  429.                     $data->{temp_result} . '['
  430.                   . ( $x + 1 ) . ','
  431.                   . ( $y - 1 ) . ','
  432.                   . $data->{a}->[ $x + 1 ][ $y - 1 ][1] . '],';
  433.                 if ( $data->{a}->[ $x + 1 ][ $y - 1 ][1] == 0 ) {
  434.                         &_clear_more( $data, $x + 1, $y - 1 );
  435.                 }
  436.         }
  437.         if (    $x + 1 <= $data->{height}
  438.                 and $data->{a}->[ $x + 1 ][$y][2] == 0 )
  439.         {
  440.                 $data->{a}->[ $x + 1 ][$y][2] = 1;
  441.                 $data->{temp_result} =
  442.                     $data->{temp_result} . '['
  443.                   . ( $x + 1 ) . ','
  444.                   . $y . ','
  445.                   . $data->{a}->[ $x + 1 ][$y][1] . '],';
  446.                 if ( $data->{a}->[ $x + 1 ][$y][1] == 0 ) {
  447.                         &_clear_more( $data, $x + 1, $y );
  448.                 }
  449.         }
  450.         if (    $x + 1 <= $data->{height}
  451.                 and $y + 1 <= $data->{width}
  452.                 and $data->{a}->[ $x + 1 ][ $y + 1 ][2] == 0 )
  453.         {
  454.                 $data->{a}->[ $x + 1 ][ $y + 1 ][2] = 1;
  455.                 $data->{temp_result} =
  456.                     $data->{temp_result} . '['
  457.                   . ( $x + 1 ) . ','
  458.                   . ( $y + 1 ) . ','
  459.                   . $data->{a}->[ $x + 1 ][ $y + 1 ][1] . '],';
  460.                 if ( $data->{a}->[ $x + 1 ][ $y + 1 ][1] == 0 ) {
  461.                         &_clear_more( $data, $x + 1, $y + 1 );
  462.                 }
  463.         }

  464. }
复制代码

[ 本帖最后由 realalley 于 2007-4-21 08:03 编辑 ]

论坛徽章:
0
8 [报告]
发表于 2007-04-21 01:15 |只看该作者
推荐你将代码加上code标签。

论坛徽章:
0
9 [报告]
发表于 2007-04-21 14:23 |只看该作者
ok!

论坛徽章:
0
10 [报告]
发表于 2007-04-21 22:27 |只看该作者
up
您需要登录后才可以回帖 登录 | 注册

本版积分规则 发表回复

  

北京盛拓优讯信息技术有限公司. 版权所有 京ICP备16024965号-6 北京市公安局海淀分局网监中心备案编号:11010802020122 niuxiaotong@pcpop.com 17352615567
未成年举报专区
中国互联网协会会员  联系我们:huangweiwei@itpub.net
感谢所有关心和支持过ChinaUnix的朋友们 转载本站内容请注明原作者名及出处

清除 Cookies - ChinaUnix - Archiver - WAP - TOP