当前位置: 首页 > 编程日记 > 正文

shell版俄罗斯方块

#!/bin/bash
# Tetris Game
# 10.21.2003 xhchen

#颜色定义
cRed=1
cGreen=2
cYellow=3
cBlue=4
cFuchsia=5
cCyan=6
cWhite=7
colorTable=($cRed $cGreen $cYellow $cBlue $cFuchsia $cCyan $cWhite)

#位置和大小
iLeft=3
iTop=2
((iTrayLeft = iLeft + 2))
((iTrayTop = iTop + 1))
((iTrayWidth = 10))
((iTrayHeight = 15))

#颜色设置
cBorder=$cGreen
cScore=$cFuchsia
cScoreValue=$cCyan

#控制信号
#改游戏使用两个进程,一个用于接收输入,一个用于游戏流程和显示界面;
#当前者接收到上下左右等按键时,通过向后者发送signal的方式通知后者。
sigRotate=25
sigLeft=26
sigRight=27
sigDown=28
sigAllDown=29
sigExit=30

#七中不同的方块的定义
#通过旋转,每种方块的显示的样式可能有几种
box0=(0 0 0 1 1 0 1 1)
box1=(0 2 1 2 2 2 3 2 1 0 1 1 1 2 1 3)
box2=(0 0 0 1 1 1 1 2 0 1 1 0 1 1 2 0)
box3=(0 1 0 2 1 0 1 1 0 0 1 0 1 1 2 1)
box4=(0 1 0 2 1 1 2 1 1 0 1 1 1 2 2 2 0 1 1 1 2 0 2 1 0 0 1 0 1 1 1 2)
box5=(0 1 1 1 2 1 2 2 1 0 1 1 1 2 2 0 0 0 0 1 1 1 2 1 0 2 1 0 1 1 1 2)
box6=(0 1 1 1 1 2 2 1 1 0 1 1 1 2 2 1 0 1 1 0 1 1 2 1 0 1 1 0 1 1 1 2)
#所有其中方块的定义都放到box变量中
box=(${box0[@]} ${box1[@]} ${box2[@]} ${box3[@]} ${box4[@]} ${box5[@]} ${box6[@]})
#各种方块旋转后可能的样式数目
countBox=(1 2 2 2 4 4 4)
#各种方块再box数组中的偏移
offsetBox=(0 1 3 5 7 11 15)

#每提高一个速度级需要积累的分数
iScoreEachLevel=50 #be greater than 7

#运行时数据
sig=0 #接收到的signal
iScore=0 #总分
iLevel=0 #速度级
boxNew=() #新下落的方块的位置定义
cBoxNew=0 #新下落的方块的颜色
iBoxNewType=0 #新下落的方块的种类
iBoxNewRotate=0 #新下落的方块的旋转角度
boxCur=() #当前方块的位置定义
cBoxCur=0 #当前方块的颜色
iBoxCurType=0 #当前方块的种类
iBoxCurRotate=0 #当前方块的旋转角度
boxCurX=-1 #当前方块的x坐标位置
boxCurY=-1 #当前方块的y坐标位置
iMap=() #背景方块图表

#初始化所有背景方块为-1, 表示没有方块
for ((i = 0; i < iTrayHeight * iTrayWidth; i++)); do iMap[$i]=-1; done


#接收输入的进程的主函数
function RunAsKeyReceiver()
{
local pidDisplayer key aKey sig cESC sTTY

pidDisplayer=$1
aKey=(0 0 0)

cESC=`echo -ne "\33"`
cSpace=`echo -ne "\40"`

#保存终端属性。在read -s读取终端键时,终端的属性会被暂时改变。
#如果在read -s时程序被不幸杀掉,可能会导致终端混乱,
#需要在程序退出时恢复终端属性。
sTTY=`stty -g`

#捕捉退出信号
trap "MyExit;" INT TERM
trap "MyExitNoSub;" $sigExit

#隐藏光标
echo -ne "\33[?25l"


while (( 1 ))
do
#读取输入。注-s不回显,-n读到一个字符立即返回
read -s -n 1 key

aKey[0]=${aKey[1]}
aKey[1]=${aKey[2]}
aKey[2]=$key
sig=0

#判断输入了何种键
if [[ $key == $cESC && ${aKey[1]} == $cESC ]]
then
#ESC键
MyExit
elif [[ ${aKey[0]} == $cESC && ${aKey[1]} == "[" ]]
then
if [[ $key == "A" ]]; then sig=$sigRotate #<向上键>
elif [[ $key == "B" ]]; then sig=$sigDown #<向下键>
elif [[ $key == "D" ]]; then sig=$sigLeft #<向左键>
elif [[ $key == "C" ]]; then sig=$sigRight #<向右键>
fi
elif [[ $key == "W" || $key == "w" ]]; then sig=$sigRotate #W, w
elif [[ $key == "S" || $key == "s" ]]; then sig=$sigDown #S, s
elif [[ $key == "A" || $key == "a" ]]; then sig=$sigLeft #A, a
elif [[ $key == "D" || $key == "d" ]]; then sig=$sigRight #D, d
elif [[ "[$key]" == "[]" ]]; then sig=$sigAllDown #空格键
elif [[ $key == "Q" || $key == "q" ]] #Q, q
then
MyExit
fi

if [[ $sig != 0 ]]
then
#向另一进程发送消息
kill -$sig $pidDisplayer
fi
done
}

#退出前的恢复
function MyExitNoSub()
{
local y

#恢复终端属性
stty $sTTY
((y = iTop + iTrayHeight + 4))

#显示光标
echo -e "\33[?25h\33[${y};0H"
exit
}


function MyExit()
{
#通知显示进程需要退出
kill -$sigExit $pidDisplayer

MyExitNoSub
}


#处理显示和游戏流程的主函数
function RunAsDisplayer()
{
local sigThis
InitDraw

#挂载各种信号的处理函数
trap "sig=$sigRotate;" $sigRotate
trap "sig=$sigLeft;" $sigLeft
trap "sig=$sigRight;" $sigRight
trap "sig=$sigDown;" $sigDown
trap "sig=$sigAllDown;" $sigAllDown
trap "ShowExit;" $sigExit

while (( 1 ))
do
#根据当前的速度级iLevel不同,设定相应的循环的次数
for ((i = 0; i < 21 - iLevel; i++))
do
sleep 0.02
sigThis=$sig
sig=0

#根据sig变量判断是否接受到相应的信号
if ((sigThis == sigRotate)); then BoxRotate; #旋转
elif ((sigThis == sigLeft)); then BoxLeft; #左移一列
elif ((sigThis == sigRight)); then BoxRight; #右移一列
elif ((sigThis == sigDown)); then BoxDown; #下落一行
elif ((sigThis == sigAllDown)); then BoxAllDown; #下落到底
fi
done
#kill -$sigDown $$
BoxDown #下落一行
done
}


#BoxMove(y, x), 测试是否可以把移动中的方块移到(x, y)的位置, 返回0则可以, 1不可以
function BoxMove()
{
local j i x y xTest yTest
yTest=$1
xTest=$2
for ((j = 0; j < 8; j += 2))
do
((i = j + 1))
((y = ${boxCur[$j]} + yTest))
((x = ${boxCur[$i]} + xTest))
if (( y < 0 || y >= iTrayHeight || x < 0 || x >= iTrayWidth))
then
#撞到墙壁了
return 1
fi
if ((${iMap[y * iTrayWidth + x]} != -1 ))
then
#撞到其他已经存在的方块了
return 1
fi
done
return 0;
}


#将当前移动中的方块放到背景方块中去,
#并计算新的分数和速度级。(即一次方块落到底部)
function Box2Map()
{
local j i x y xp yp line

#将当前移动中的方块放到背景方块中去
for ((j = 0; j < 8; j += 2))
do
((i = j + 1))
((y = ${boxCur[$j]} + boxCurY))
((x = ${boxCur[$i]} + boxCurX))
((i = y * iTrayWidth + x))
iMap[$i]=$cBoxCur
done

#消去可被消去的行
line=0
for ((j = 0; j < iTrayWidth * iTrayHeight; j += iTrayWidth))
do
for ((i = j + iTrayWidth - 1; i >= j; i--))
do
if ((${iMap[$i]} == -1)); then break; fi
done
if ((i >= j)); then continue; fi

((line++))
for ((i = j - 1; i >= 0; i--))
do
((x = i + iTrayWidth))
iMap[$x]=${iMap[$i]}
done
for ((i = 0; i < iTrayWidth; i++))
do
iMap[$i]=-1
done
done

if ((line == 0)); then return; fi

#根据消去的行数line计算分数和速度级
((x = iLeft + iTrayWidth * 2 + 7))
((y = iTop + 11))
((iScore += line * 2 - 1))
#显示新的分数
echo -ne "\33[1m\33[3${cScoreValue}m\33[${y};${x}H${iScore} "
if ((iScore % iScoreEachLevel < line * 2 - 1))
then
if ((iLevel < 20))
then
((iLevel++))
((y = iTop + 14))
#显示新的速度级
echo -ne "\33[3${cScoreValue}m\33[${y};${x}H${iLevel} "
fi
fi
echo -ne "\33[0m"


#重新显示背景方块
for ((y = 0; y < iTrayHeight; y++))
do
((yp = y + iTrayTop + 1))
((xp = iTrayLeft + 1))
((i = y * iTrayWidth))
echo -ne "\33[${yp};${xp}H"
for ((x = 0; x < iTrayWidth; x++))
do
((j = i + x))
if ((${iMap[$j]} == -1))
then
echo -ne " "
else
echo -ne "\33[1m\33[7m\33[3${iMap[$j]}m\33[4${iMap[$j]}m[]\33[0m"
fi
done
done
}


#下落一行
function BoxDown()
{
local y s
((y = boxCurY + 1)) #新的y坐标
if BoxMove $y $boxCurX #测试是否可以下落一行
then
s="`DrawCurBox 0`" #将旧的方块抹去
((boxCurY = y))
s="$s`DrawCurBox 1`" #显示新的下落后方块
echo -ne $s
else
#走到这儿, 如果不能下落了
Box2Map #将当前移动中的方块贴到背景方块中
RandomBox #产生新的方块
fi
}

#左移一列
function BoxLeft()
{
local x s
((x = boxCurX - 1))
if BoxMove $boxCurY $x
then
s=`DrawCurBox 0`
((boxCurX = x))
s=$s`DrawCurBox 1`
echo -ne $s
fi
}

#右移一列
function BoxRight()
{
local x s
((x = boxCurX + 1))
if BoxMove $boxCurY $x
then
s=`DrawCurBox 0`
((boxCurX = x))
s=$s`DrawCurBox 1`
echo -ne $s
fi
}


#下落到底
function BoxAllDown()
{
local k j i x y iDown s
iDown=$iTrayHeight

#计算一共需要下落多少行
for ((j = 0; j < 8; j += 2))
do
((i = j + 1))
((y = ${boxCur[$j]} + boxCurY))
((x = ${boxCur[$i]} + boxCurX))
for ((k = y + 1; k < iTrayHeight; k++))
do
((i = k * iTrayWidth + x))
if (( ${iMap[$i]} != -1)); then break; fi
done
((k -= y + 1))
if (( $iDown > $k )); then iDown=$k; fi
done

s=`DrawCurBox 0` #将旧的方块抹去
((boxCurY += iDown))
s=$s`DrawCurBox 1` #显示新的下落后的方块
echo -ne $s
Box2Map #将当前移动中的方块贴到背景方块中
RandomBox #产生新的方块
}


#旋转方块
function BoxRotate()
{
local iCount iTestRotate boxTest j i s
iCount=${countBox[$iBoxCurType]} #当前的方块经旋转可以产生的样式的数目

#计算旋转后的新的样式
((iTestRotate = iBoxCurRotate + 1))
if ((iTestRotate >= iCount))
then
((iTestRotate = 0))
fi

#更新到新的样式, 保存老的样式(但不显示)
for ((j = 0, i = (${offsetBox[$iBoxCurType]} + $iTestRotate) * 8; j < 8; j++, i++))
do
boxTest[$j]=${boxCur[$j]}
boxCur[$j]=${box[$i]}
done

if BoxMove $boxCurY $boxCurX #测试旋转后是否有空间放的下
then
#抹去旧的方块
for ((j = 0; j < 8; j++))
do
boxCur[$j]=${boxTest[$j]}
done
s=`DrawCurBox 0`

#画上新的方块
for ((j = 0, i = (${offsetBox[$iBoxCurType]} + $iTestRotate) * 8; j < 8; j++, i++))
do
boxCur[$j]=${box[$i]}
done
s=$s`DrawCurBox 1`
echo -ne $s
iBoxCurRotate=$iTestRotate
else
#不能旋转,还是继续使用老的样式
for ((j = 0; j < 8; j++))
do
boxCur[$j]=${boxTest[$j]}
done
fi
}


#DrawCurBox(bDraw), 绘制当前移动中的方块, bDraw为1, 画上, bDraw为0, 抹去方块。
function DrawCurBox()
{
local i j t bDraw sBox s
bDraw=$1

s=""
if (( bDraw == 0 ))
then
sBox="\40\40"
else
sBox="[]"
s=$s"\33[1m\33[7m\33[3${cBoxCur}m\33[4${cBoxCur}m"
fi

for ((j = 0; j < 8; j += 2))
do
((i = iTrayTop + 1 + ${boxCur[$j]} + boxCurY))
((t = iTrayLeft + 1 + 2 * (boxCurX + ${boxCur[$j + 1]})))
#\33[y;xH, 光标到(x, y)处
s=$s"\33[${i};${t}H${sBox}"
done
s=$s"\33[0m"
echo -n $s
}


#更新新的方块
function RandomBox()
{
local i j t

#更新当前移动的方块
iBoxCurType=${iBoxNewType}
iBoxCurRotate=${iBoxNewRotate}
cBoxCur=${cBoxNew}
for ((j = 0; j < ${#boxNew[@]}; j++))
do
boxCur[$j]=${boxNew[$j]}
done


#显示当前移动的方块
if (( ${#boxCur[@]} == 8 ))
then
#计算当前方块该从顶端哪一行"冒"出来
for ((j = 0, t = 4; j < 8; j += 2))
do
if ((${boxCur[$j]} < t)); then t=${boxCur[$j]}; fi
done
((boxCurY = -t))
for ((j = 1, i = -4, t = 20; j < 8; j += 2))
do
if ((${boxCur[$j]} > i)); then i=${boxCur[$j]}; fi
if ((${boxCur[$j]} < t)); then t=${boxCur[$j]}; fi
done
((boxCurX = (iTrayWidth - 1 - i - t) / 2))

#显示当前移动的方块
echo -ne `DrawCurBox 1`

#如果方块一出来就没处放,Game over!
if ! BoxMove $boxCurY $boxCurX
then
kill -$sigExit ${PPID}
ShowExit
fi
fi



#清除右边预显示的方块
for ((j = 0; j < 4; j++))
do
((i = iTop + 1 + j))
((t = iLeft + 2 * iTrayWidth + 7))
echo -ne "\33[${i};${t}H "
done

#随机产生新的方块
((iBoxNewType = RANDOM % ${#offsetBox[@]}))
((iBoxNewRotate = RANDOM % ${countBox[$iBoxNewType]}))
for ((j = 0, i = (${offsetBox[$iBoxNewType]} + $iBoxNewRotate) * 8; j < 8; j++, i++))
do
boxNew[$j]=${box[$i]};
done

((cBoxNew = ${colorTable[RANDOM % ${#colorTable[@]}]}))

#显示右边预显示的方块
echo -ne "\33[1m\33[7m\33[3${cBoxNew}m\33[4${cBoxNew}m"
for ((j = 0; j < 8; j += 2))
do
((i = iTop + 1 + ${boxNew[$j]}))
((t = iLeft + 2 * iTrayWidth + 7 + 2 * ${boxNew[$j + 1]}))
echo -ne "\33[${i};${t}H[]"
done
echo -ne "\33[0m"
}


#初始绘制
function InitDraw()
{
clear
RandomBox #随机产生方块,这时右边预显示窗口中有方快了
RandomBox #再随机产生方块,右边预显示窗口中的方块被更新,原先的方块将开始下落
local i t1 t2 t3

#显示边框
echo -ne "\33[1m"
echo -ne "\33[3${cBorder}m\33[4${cBorder}m"

((t2 = iLeft + 1))
((t3 = iLeft + iTrayWidth * 2 + 3))
for ((i = 0; i < iTrayHeight; i++))
do
((t1 = i + iTop + 2))
echo -ne "\33[${t1};${t2}H||"
echo -ne "\33[${t1};${t3}H||"
done

((t2 = iTop + iTrayHeight + 2))
for ((i = 0; i < iTrayWidth + 2; i++))
do
((t1 = i * 2 + iLeft + 1))
echo -ne "\33[${iTrayTop};${t1}H=="
echo -ne "\33[${t2};${t1}H=="
done
echo -ne "\33[0m"


#显示"Score"和"Level"字样
echo -ne "\33[1m"
((t1 = iLeft + iTrayWidth * 2 + 7))
((t2 = iTop + 10))
echo -ne "\33[3${cScore}m\33[${t2};${t1}HScore"
((t2 = iTop + 11))
echo -ne "\33[3${cScoreValue}m\33[${t2};${t1}H${iScore}"
((t2 = iTop + 13))
echo -ne "\33[3${cScore}m\33[${t2};${t1}HLevel"
((t2 = iTop + 14))
echo -ne "\33[3${cScoreValue}m\33[${t2};${t1}H${iLevel}"
echo -ne "\33[0m"
}


#退出时显示GameOVer!
function ShowExit()
{
local y
((y = iTrayHeight + iTrayTop + 3))
echo -e "\33[${y};0HGameOver!\33[0m"
exit
}



#游戏主程序在这儿开始.
if [[ $1 != "--show" ]]
then
bash $0 --show& #以参数--show将本程序再运行一遍
RunAsKeyReceiver $! #以上一行产生的进程的进程号作为参数
exit
else
#当发现具有参数--show时,运行显示函数
RunAsDisplayer
exit
fi

相关文章:

利用计算机进行机械设计属于什么,计算机技术机械设计应用

【摘要】近几年计算机技术的飞速发展使得它在各个领域中的地位越来越显著&#xff0c;应用越来越广泛&#xff0c;在机械设计过程中也逐渐地引入了计算机技术。在计算机技术中有一种单独的辅助设计技术用来辅助各种设计工作&#xff0c;计算机辅助设计技术使得机械设计更加简单…

linux carry php Soap 扩展

前言今天又出现下问题了需要解决如下&#xff1a;报错信息是没有soap这个扩展&#xff01;解决问题如图所示&#xff1a;cd php-5.6.2/ext/soap//usr/local/php5/bin/phpize # 进入phpize开始编译安装 ./configure -with-php-config/usr/local/php5/bin/php-config -enable-so…

html使用highcharts绘制饼图,html js highcharts绘制圆饼图表

jquery实现饼状图效果 - 站长素材var chart;$(function () {var totalMoney999var zccw178var sycw821$(document).ready(function() {chart new Highcharts.Chart({chart: {renderTo: pie_chart,plotBackgroundColor: white,//背景颜色plotBorderWidth: 0,plotShadow: false}…

pycharm的安装配置和简单使用

1.pycharm的安装和配置1&#xff09;下载地址https://www.jetbrains.com/pycharm/download/#sectionwindows各位可以选择Community版本进行安装学习&#xff0c;土豪可以选择Professional版本下载安装包后默认安装2&#xff09;基本设置file-setting-project-project interpret…

港中大、商汤开源目标检测工具包mmdetection,对比Detectron如何?

近日&#xff0c;香港中文大学-商汤联合实验室开源了基于 PyTorch 的检测库——mmdetection。上个月&#xff0c;商汤和港中大组成的团队在 COCO 比赛的物体检测&#xff08;Detection&#xff09;项目中夺得冠军&#xff0c;而 mmdetection 正是基于 COCO 比赛时的 codebase 重…

关注中国的房地产市场

美国房贷呆账持续恶化引发道指大跌 亚洲股市应声猛泻中国的房地产&#xff0c;现在热得不得了&#xff0c;很多人贷款买房&#xff0c;买房子的人多了&#xff0c;房价也就上涨很多&#xff0c;投机商也囤积居奇。更促使房价迅猛上升。当中国房价不断上涨的势头减缓的时候&…

冠军揭晓!京东Alpha开发者大赛Pick谁上了C位

近期&#xff0c;京东Alpha开发者大赛圆满结束。遍布全国的AI开发爱好者&#xff0c;对本次大赛展现出了超乎想象的激情与热爱&#xff0c;开发出了很多优质、好玩的技能作品。家中有叮咚的朋友们也纷纷表示更喜欢撩音箱了&#xff0c;因为男女朋友、赚钱、娱乐游戏、学习……通…

大白话讲解Promise(二)理解Promise规范

上一篇我们讲解了ES6中Promise的用法&#xff0c;但是知道了用法还远远不够&#xff0c;作为一名专业的前端工程师&#xff0c;还必须通晓原理。所以&#xff0c;为了补全我们关于Promise的知识树&#xff0c;有必要理解Promise/A规范&#xff0c;理解了它你才能知道Promise内部…

量子计算机人类意识云,意识上传-人类距离永生还要多久(大脑的工作原理很有可能与量子计算机一致)...

事情的引子是最近的科幻电影《炭变》&#xff0c; 300年后&#xff0c;人类意识上传到数字植入物(称为“堆栈”)中&#xff0c;并且富人还可以不停的升级&#xff0c;并基本上永远活着。虽说这只是部科幻电影&#xff0c;但也会让很多人流口水&#xff0c;毕竟如果有可能实现永…

Alpha混合

Direct3D计算Alpha混合的颜色公式&#xff1a;Color ( SrcRGB * SrcK ) ( DestRGB * DestK )SrcRGB表示源颜色值&#xff0c;即将要绘制的颜色值。SrcK表示源混合系数&#xff0c;通常赋值为D3DBLEND_SRCALPHA&#xff0c;即当前绘制像素的Alpha值DestRGB表示目标颜色值&…

考研计算机专业课怎么复习,2016考研计算机专业课如何复习?

2016考研计算机专业课如何复习&#xff1f;?基础复习阶段以指定参考书为主&#xff0c;兼顾笔记&#xff0c;进行专业课的第一轮复习。看书要以理解为主&#xff0c;不必纠缠于细节&#xff0c;并在不懂的知识点处做上标记。第一步&#xff0c;选择一本难度适宜、内容全面、与…

Linux 学习手记(1):命令行BASH的基本操作

1. Shell 是什么 Shell&#xff08;壳&#xff09;是用户与操作系统底层&#xff08;通常是内核&#xff09;之间交互的中介程序&#xff0c;负责将用户指令、操作传递给操作系统底层。 Shell一般分为&#xff1a;图形化Shell&#xff08;GUI&#xff09;、命令行Shell&#xf…

为了智能驾驶,李彦宏要改造城市道路了!

10 月 18 日&#xff0c;在世界智能网联汽车大会上&#xff0c;百度 CEO 李彦宏提到&#xff1a;当汽车变得越来越智能&#xff0c;道路的基础设施也必须跟着变&#xff0c;必须进行改造。 李彦宏在发言中表示&#xff0c;“很多自动驾驶汽车都是需要依赖极其昂贵的激光雷达来…

LoadRunner Winsock 10053错误的真正原因

最近使用LoadRunner进行Winsock协议的性能测试时&#xff0c;测试的WebServer是JBoss&#xff0c;经常出现10053错误&#xff0c;现象如下&#xff1a;当我用lrs_create_socket创建连接之后&#xff0c;当这个socket连接的请求次数达到100次后&#xff0c;这个连接就不可用了&a…

dsp和通用计算机的区别,dsp芯片是什么_dsp芯片和通用微处理器有什么区别

对于dsp芯片很多人都会比较陌生&#xff0c;它主要运用在信号处理、图像处理、声音语言等多个场所。那么dsp芯片到底是什么呢&#xff1f;它和通用微处理器有什么不同。接下来小编就简单的给大家介绍一下dsp芯片是什么及dsp芯片和通用微处理器有什么区别。一、dsp芯片是什么1、…

百度大脑发布企业服务解决方案,将 AI 技术落实到细分领域

人工智能竞争之势愈演愈烈&#xff0c;AI与场景应用的深度结合将成为各家企业的取胜关键。10月18日&#xff0c;百度大脑行业创新论坛在北京正式拉开帷幕&#xff0c;届时将走进全国6个城市举办7场以企业服务、信息服务和零售等为主题的专题活动&#xff0c;展示人工智能与不同…

图片上传(加水印、缩略图、远程保存)的简单例子

图片上传(加水印、缩略图、远程保存&#xff09;的简单例子&#xff08;应用于51aspx.com&#xff09;该源码下载地址&#xff1a;http://51aspx.com/CV/ImageUpload今天看到xiongeee发的文章使用使用FileUpload控件上传图片并自动生成缩略图、自动生成带文字和图片的水印图 …

wp实例开发精品文章源码推荐

qianqianlianmengwp实例开发精品文章源码推荐 WP8 启动媒体应用 这个示例演示了如何选择正确的msAudioCategory类别的音像(AV)流来配置它作为一个音频播放流。具体地说,这个示例执行以下操作:启动一个媒体应用与“媒体”msA……资源地址&#xff1a; http://www.apkbus.…

98级计算机应用教材,西安外事学院98级计算机应用9806班毕业二十年校友返校

7月28日&#xff0c;计算机应用9806班的校友们赴二十年之约&#xff0c;相聚于西安外事学院工学院。出席此次会议的有工学院党总支书记、副院长任国良、计算机应用9806班当年的老师赵培华、张凤琴、刘可、刘挺以及计算机应用9806班的学生。会议之前&#xff0c;校友们参观了学校…

js:appendChild、insertBefore和insertAfter

web/Win8开发中经常要在js中动态增加一些element&#xff0c;就需要用到下面的一些方法&#xff1a; appendChild&#xff1a; target.appendChild(newChild) newChild作为target的子节点插入最后的一子节点之后 insertBefore&#xff1a; target.insertBefore(newChild,existi…

来呀!AI喊你斗地主——首个搞定斗地主的深度神经网络

参加 2018 AI开发者大会&#xff0c;请点击 ↑↑↑ 作者 | Anonymous authors 译者 | 蔡志兴 编辑 | Jane 出品 | AI科技大本营 【导读】近年来&#xff0c;从围棋到 Dota 团战赛&#xff0c;深度神经网络应用在各种游戏竞赛中不断取得突破。这一次&#xff0c;有人把这种方…

在 Django 的 View 中利用 function decorator 可实现一定程度的代码重用

在 Django 中&#xff0c;假设有几个 view, 他们都接受类似的参数&#xff0c;做类似的处理&#xff0c;最后又输出类似的变量到模板中配合显示&#xff0c;唯一不同的就是模板路径。 最普通的写法可能是这样&#xff1a; defview_a(request, some_id): some_obj SomeClass.…

Linux---管理网络

一、ip基础知识1.ipv42进制32位-----10进制 172.25.0.10/255.255.255.0172.25.0.10&#xff1a;ip地址255.255.255.0&#xff1a;子网掩码子网掩码255位对应的ip位为网络位子网掩码0对应的ip位为主机位二、主机联网主机有两块网卡&#xff1a;有线和无线&#xff1b;&#xff0…

网络丢包现象分析处理指导书5

sniffer简明教程 xiong2127 51cto技术博客sniffer是由NAI公司提供的强大的协议分析仪&#xff0c;完整的sniffer系统&#xff0c;除了我们经常使用的以太网模块外&#xff0c;还具有广域网模块&#xff0c;广域网模块需要专用的硬件支持。比如E1/FR/POS/ATM等&#xff0c;均需要…

信息与计算机科学考研学校排名,计算机科学与技术考研学校排名

该楼层疑似违规已被系统折叠 隐藏此楼查看此楼排名 学校名称 评估结果1 北京大学 A2 清华大学 A3 浙江大学 A4 国防科技大学 A5 北京航空航天大学 A6 北京邮电大学 A7 哈尔滨工业大学 A8 上海交通大学 A9 南京大学 A10 华中科技大学 A11 电子科技大学 A12 北京交通大学 A-13 北…

800万中文词,腾讯AI Lab开源大规模NLP数据集

参加 2018 AI开发者大会&#xff0c;请点击 ↑↑↑ 10 月19 日&#xff0c;腾讯 AI Lab 宣布开源大规模、高质量的中文词向量数据。该数据包含 800 多万中文词汇。 腾讯 AI Lab 表示&#xff0c;相比现有的公开数据&#xff0c;该数据在覆盖率、新鲜度及准确性上大幅提高&#…

屏幕后处理——Bloom

来自于《Unity Shader 入门精要》书本的学习 先上图 代码分3部分 1.PostEffectsBase.cs using System.Collections; using System.Collections.Generic; using UnityEngine; //在编辑器状态下可执行该脚本来查看效果 [ExecuteInEditMode] //屏幕后处理特效一般需要绑定在摄像…

服务端口大全+注解

端口&#xff1a;0服务&#xff1a;Reserved说明&#xff1a;通常用于分析操作系统。这一方法能够工作是因为在一些系统中“0”是无效端口&#xff0c;当你试图使用通常的闭合端口连接它时将产生不同的结果。一种典型的扫描&#xff0c;使用IP地址为0.0.0.0&#xff0c;设置ACK…

双绞线是计算机网络的一种通信线路吗,计算机网络环境的信道传输技术分析

韩长军【摘要】计算机网络的产生对人类文明进步树立了新标杆&#xff0c;促进了人们的交流&#xff0c;对于人类社会信息获得的途径以及咨询传播方式等等也产生了极其重大的影响。数据密集程度较高的科学和工程&#xff0c;比如、水文观测、地壳波动资料、气象行业等等&#xf…

为了智能驾驶,李彦宏要改造城市道路

10 月 18 日&#xff0c;在世界智能网联汽车大会上&#xff0c;百度 CEO 李彦宏提到&#xff1a;当汽车变得越来越智能&#xff0c;道路的基础设施也必须跟着变&#xff0c;必须进行改造。 李彦宏在发言中表示&#xff0c;“很多自动驾驶汽车都是需要依赖极其昂贵的激光雷达来实…