PDA

View Full Version : ایجاد یک وقفه ی کوتاه فبل از این که کامپیوتر جواب دهد.



#Faranak
پنج شنبه 30 اردیبهشت 1389, 15:32 عصر
سلام .من یک بازی نوشتم بین فردی که لاگین می کنه و کامپیوتر.می خوام وقتی کامپیوتر
می خواد بازی کنه یک وقفه ی 3ثانیه ای ایجاد بشه بعد کامپیوتر جواب بده قبلا باکد javascript زیر دیده بودم که وقتی کامپیوتر می خوادیک پیغام نشون بده اول کمی صبر می کنه بعد پیغام می ده



<script language="javascript">
function operation() {
alert(':-)');
setTimeout('operation()', 2000);
}
</script>



البته پیغام ایجاد شده فقط کاربر نمی بینه و بعد از یک وقفه ی کوتاه می بینه.
اما حالا نمی دونم چه جوری برای بازیم که بازی XOهست ووقتی کامپیوتر می خوادO رایت کنه یک وقفه ی کوتاه ایجادکنم.
اگه کسی بلده لطفا راهنمایی کنه .
ممنون.

Peyman.Gh
پنج شنبه 30 اردیبهشت 1389, 16:54 عصر
این کد موجب تاخیر 3 ثانیه ای میشود.
System.Threading.Thread.Sleep(TimeSpan.FromSeconds (3));
زمان آن میتواند بر حسب میلی ثانیه , ثانیه ، دقیقه ,ساعت و روز باشد.

موفق باشید.

#Faranak
پنج شنبه 30 اردیبهشت 1389, 17:24 عصر
این کد موجب تاخیر 3 ثانیه ای میشود.
System.Threading.Thread.Sleep(TimeSpan.FromSeconds (3));
زمان آن میتواند بر حسب میلی ثانیه , ثانیه ، دقیقه ,ساعت و روز باشد.

موفق باشید.

من قبلا هنگام رایت کردن Oها توسط کامپیوتریک زمان آزمایشی در پرانتز در کد زیر نوشتم:

thread.sleep(3000);

اما وقتی روی کامپیوتر یک دکمه رو کلیک می کردم که Xرایت کنه می دیدم که این تاخیرو برای رایت Xهم (کاربرXرو رایت می کنه)حساب می کنه . در صورتی که من می خوام وقتی کاربر یک دکمه رو زد سریع Xرو روی دکمه ی فشرده شده رایت کنه اما وقتی نوبت رایت Oتوسط
کامپیوتر شد 3ثانیه صبر کنه و بعد Oرو رایت کنه اما کد بالا باعث می شه برای هر رایت XوOهم 3ثانیه طول بکشه.تا جایی که من در این مورد تحقیق کردم به دو صورت می شه این کارو کرد:که یکی همین threadingست که فکر می کنم پیچیده تر باشه.و یکی javascript که از دو تابع settimeoutکه در بالا نوشتم و یک تابع دیگر باید استفاده بشه که این تابع postbackایجادکنه اما نمی دونم این تابع چیه و در ضمن فکر می کنم javascript راحت تر باشه .

نوشتن threadingببه این صورت اون وقفه ای که من می خوام یعنی( فقط) برای O ایجاد نمی کنه.اگه ممکنه در همین threadingراهنمایی کنید چه جوری نخ رو ایجاد کنم که به جواب مورد نظرم برسم ویا کد javascriptرواگه می دونید چه تابعی بهش اضافه کنم ممنون می شم.

Peyman.Gh
پنج شنبه 30 اردیبهشت 1389, 17:29 عصر
شما میتونید با شرط این وقفه را ایجاد نمایید.

if (//)
{
System.Threading.Thread.Sleep(TimeSpan.FromSeconds (3));
//
}
else
{
//
}

#Faranak
پنج شنبه 30 اردیبهشت 1389, 18:46 عصر
شما میتونید با شرط این وقفه را ایجاد نمایید.

if (//)
{
System.Threading.Thread.Sleep(TimeSpan.FromSeconds (3));
//
}
else
{
//
}

استفاده از Ifرو الان تست کردم بازهم همون نتیجه ای که گفتم رو گرفتم یعنی X,Oرو با هم رایت می کنه و قبل از رایتشون هم 3ثانیه صبر می کنه.

Peyman.Gh
جمعه 31 اردیبهشت 1389, 12:01 عصر
شرط را برای یکی از آیتم ها اعمال کنید یعنی اگر O بود وقفه اعمال شود.

raziee
جمعه 31 اردیبهشت 1389, 12:05 عصر
این کد موجب تاخیر 3 ثانیه ای میشود.
view source

print
?
1.
System.Threading.Thread.Sleep(TimeSpan.FromSeconds (3));

زمان آن میتواند بر حسب میلی ثانیه , ثانیه ، دقیقه ,ساعت و روز باشد.

موفق باشید.
این کد باعث وقفه 3 ثانیه در سرور میشنه. نه در خروجی.

سلام .من یک بازی نوشتم بین فردی که لاگین می کنه و کامپیوتر.می خوام وقتی کامپیوتر
می خواد بازی کنه یک وقفه ی 3ثانیه ای ایجاد بشه بعد کامپیوتر جواب بده قبلا باکد javascript زیر دیده بودم که وقتی کامپیوتر می خوادیک پیغام نشون بده اول کمی صبر می کنه بعد پیغام می ده
کد:

<scriptlanguage="javascript">
function operation() {
alert(':-)');
setTimeout('operation()', 2000);
}
</script>
البته پیغام ایجاد شده فقط کاربر نمی بینه و بعد از یک وقفه ی کوتاه می بینه.
اما حالا نمی دونم چه جوری برای بازیم که بازی XOهست ووقتی کامپیوتر می خوادO رایت کنه یک وقفه ی کوتاه ایجادکنم.
اگه کسی بلده لطفا راهنمایی کنه .
ممنون.

چون شما میخواهید بعد از گرفتن جواب از سرور ، در کلاینت وقفه ایجاد کنید مجبورید که از جاوا اسکریپت کمک بگیرید.
شما میتونید یک تابع جاوا اسکریپت بنویسید که مثلا یک پیغام رو نمایش بده. و در زمان کامل شدن لود صفحه اون تابه رو فراخونی کنید(حالا با هر وقفه ای که دوست دارید.)

#Faranak
جمعه 31 اردیبهشت 1389, 14:49 عصر
این کد باعث وقفه 3 ثانیه در سرور میشنه. نه در خروجی.


چون شما میخواهید بعد از گرفتن جواب از سرور ، در کلاینت وقفه ایجاد کنید مجبورید که از جاوا اسکریپت کمک بگیرید.
شما میتونید یک تابع جاوا اسکریپت بنویسید که مثلا یک پیغام رو نمایش بده. و در زمان کامل شدن لود صفحه اون تابه رو فراخونی کنید(حالا با هر وقفه ای که دوست دارید.)

بله من هم دقیقا می خوام همین کارو انجام بدم.در نوشتن این تابع که ایجاد postbackمی کنه لطفا منو را هنمایی کنید البته خودم مواردی دیدم اما نمی تونم ازشون استفاده کنم.
مثلا در لینک زیر:

http://www.astahost.com/info.php/Cnet-Web-Timer-Control-Tutorial_t6605.html

ممنون

raziee
جمعه 31 اردیبهشت 1389, 15:42 عصر
بله من هم دقیقا می خوام همین کارو انجام بدم.در نوشتن این تابع که ایجاد postbackمی کنه لطفا منو را هنمایی کنید البته خودم مواردی دیدم اما نمی تونم ازشون استفاده کنم.
مثلا در لینک زیر:
http://www.astahost.com/info.php/Cne...ial_t6605.html
لینکی که داده بودید رو نگاه کردم.
اون هم به چیزی که شما میخواید ارتباطی نداره، مگر اینکه بخواید مقدار اول رو از سرور بگیره و بعد از اون دوباره یک درخواست به سرور بده و مقدار دوم رو بگیره. که در این صورت میشه.
-------------
اما برای کار شما راه کار ساده تری وجود داره.

اما حالا نمی دونم چه جوری برای بازیم که بازی XOهست ووقتی کامپیوتر می خوادO رایت کنه یک وقفه ی کوتاه ایجادکنم.
البته من این بازی رو نمیشناسم.
اما شما اون دوتا مقداری رو که میگید از سرور بگیرید(هر دو مقدار رو یکباره و با یک درخواست)(اگه این تو به هم مربوط نمیشن>> یعنی مقدار دومی بسته به مقدار اولی نباشه) و بعد از ایکه این مقادیر رو از سرور گرفتید، جدا جدا به تابع نمایش پیام بفرستید.همین.
یا اینکه در تابع نمایش بعد از نمایش مقدار اول تابع وقفه ایجاد بشه و بعد مقدار دوم رو نمایش بده.

raziee
جمعه 31 اردیبهشت 1389, 16:55 عصر
توی این بازی که گفتید چه نیازی هست که اطلاعات به سمت سرور بره و برگرده.
من یه جستجوی کوچیک کردم و این کد رو از سایت http://javascript.internet.com/games/rob's-tic,-tac,-toe.html برداشتم


<!-- TWO STEPS TO INSTALL ROB'S TIC, TAC, TOE:

1. Copy the coding into the HEAD of your HTML document
2. Add the last code into the BODY of your HTML document -->

<!-- STEP ONE: Paste this code into the HEAD of your HTML document -->

<HEAD>

<!-- This script and many more are available free online at -->
<!-- The JavaScript Source!! http://javascript.internet.com -->
<!-- Original: Rob van der Ven (vennie@wanadoo.nl) -->
<!-- Web Site: http://home.wanadoo.nl/vennie -->
<Style Type="Text/CSS">
<!--
Input{}
.blokje{
Height:48px;
Width:48px;
Font-Size:16pt;
Font-Weight:900;
Font-Family:Comic Sans MS,Arial,Verdana;
Text-Align:Center;
}
.knopje{
Width:144px;
}
-->
</Style>
</HEAD>

<!-- STEP TWO: Copy this code into the BODY of your HTML document -->

<BODY>

<!-- This script and many more are available free online at -->
<!-- The JavaScript Source!! http://javascript.internet.com -->
<!-- Original: Rob van der Ven (vennie@wanadoo.nl) -->
<!-- Web Site: http://home.wanadoo.nl/vennie -->
<Center>

<Form>
<Input Type="Button" Title="Click here to play again" Name="beurten" Width="164px" Class="knopje" Value="Player 1" onClick="wie = 'Player 1'; initieer()">
<Table CellPadding="0" CellSpacing="0" Border="0">

<Script Language="JavaScript">
<!--//
for (i = 1; i < 10; i++) {
if (i % 3 == 1) {document.write('<Tr>');}
document.write('<Td><Input Type="Button" Name="' + i + '" Value=" " Class="blokje" onClick="wijzig(this.form,this)"></Td>');
if (i % 3 == 0) {document.write('</Tr>');}
}
//-->
</Script>

</Table>

<Input Type="CheckBox" Title="Click here to change from 2 players or computergame" Name="automaat" Value="2 players" Id="autmat" onClick="if (this.value == 'Computer') {this.value = '2 players'; auto = 0} else {this.value = 'Computer'; auto = 1}; wie = 'Player 1'; initieer();"><Label For="autmat">against the computer</Label>

<Table CellPadding="0" CellSpacing="0" Border="1">
<Tr BgColor="Silver">
<Td Align="Center"> Player 1 </Td>
<Td Align="Center"> Player 2 </Td>
<Td Align="Center"> Remise </Td>
</Tr>
<Tr BgColor="Silver">
<Td Align="Center"><Input Style="BackGround-Color:Transparent;Border:Solid 0px;Text-Align:Center" Type="Text" Size="3" ReadOnly Title="Player 1" Name="speler1" Value="0"></Td>
<Td Align="Center"><Input Style="BackGround-Color:Transparent;Border:Solid 0px;Text-Align:Center" Type="Text" Size="3" ReadOnly Title="Player 2" Name="speler2" Value="0"></Td>
<Td Align="Center"><Input Style="BackGround-Color:Transparent;Border:Solid 0px;Text-Align:Center" Type="Text" Size="3" ReadOnly Title="Remise" Name="remise" Value="0"></Td>
</Tr>
</Table>
</Form>
</Center>

<Script Language="JavaScript">
<!--//

timerID = xtal = ytal = ztal = auto = 0;
wie = 'Player 1';

function initieer(){
clearTimeout(timerID);
cel = new Array(0,0,0,0,0,0,0,0,0,0);
aanv = new Array(); strat = verd = leeg = aanv;
beurt = wissel = 1; wint = keren = 0;
document.forms[0].speler1.value = xtal;
document.forms[0].speler2.value = ytal;
document.forms[0].remise.value = ztal;
if (wie != 'Start') {
for (i in cel) {
cel[i] = 0; if (i > 0) {document.forms[0].elements[i].value = ''};
}
}
document.forms[0].beurten.value = wie;
}

function zetten() {
clearTimeout(timerID);
if (aanv[0] > 0) {
slag = aanv[Math.floor(Math.random() * 10) % aanv.length]
} else if (verd[0] > 0) {
slag = verd[Math.floor(Math.random() * 10) % verd.length];
} else if (strat[0] > 0) {
slag = strat[Math.floor(Math.random() * 10) % strat.length];
} else {
slag = leeg[Math.floor(Math.random() * 10) % leeg.length];
}

if (beurt == 0 && slag > 0) {document.forms[0].elements[slag].click()};
}


function win() {
if ( cel[1] + cel[2] + cel[3] == 3 ||
cel[4] + cel[5] + cel[6] == 3 ||
cel[7] + cel[8] + cel[9] == 3 ||
cel[1] + cel[4] + cel[7] == 3 ||
cel[2] + cel[5] + cel[8] == 3 ||
cel[3] + cel[6] + cel[9] == 3 ||
cel[1] + cel[5] + cel[9] == 3 ||
cel[3] + cel[5] + cel[7] == 3
) {

if (confirm("Player 1: You win !!!\nDo you want to play again?"))
{
wint = 1;
xtal++; wie = 'Player 1'; timerID = setTimeout('initieer()',800)
} else {
xtal++; wie = 'Start'; timerID = setTimeout('initieer()',800)
};
}
if ( cel[1] + cel[2] + cel[3] == 30 ||
cel[4] + cel[5] + cel[6] == 30 ||
cel[7] + cel[8] + cel[9] == 30 ||
cel[1] + cel[4] + cel[7] == 30 ||
cel[2] + cel[5] + cel[8] == 30 ||
cel[3] + cel[6] + cel[9] == 30 ||
cel[1] + cel[5] + cel[9] == 30 ||
cel[3] + cel[5] + cel[7] == 30
) {
if (confirm(((auto == 1) ? ('Computer wins, sorry') : ('Player 2: You win !!')) + "!\nDo you want to play again?")) {
ytal++; wie = 'Player 1'; timerID = setTimeout('initieer()',800)
} else {
ytal++; wie = 'Start'; timerID = setTimeout('initieer()',800)
};
}
}

function wisselen(beurt){
if (wissel == 1) {
if (beurt == 0) {
beurt = 1;
wie = "Player " + 1
}
else {
if (auto == 0) {beurt = 0;
wie = "Player " + 2} else {beurt = 0; wie = "Computer";}
}
if (keren == 9
) {
if (confirm("Remise!!!\n\nDo you want to play again?")) {
ztal++; wie = 'Player 1'; timerID = setTimeout('initieer()',800)} else
{ztal++; wie = 'Start'; timerID = setTimeout('initieer()',800)};
}

}
else {
beurt = beurt;
}
wissel = 1;
return(beurt);
}

function wijziging(klik) {

plek = cel[klik]; geklikt = klik;

if (plek == 0){
if (beurt == 0){
xo = "O";
plek = 10;
} else {
xo = "X";
plek = 1;
}
cel[klik] = plek; keren++;
}
else {
if (plek == 10){
xo = "O";}
if (plek == 1){
xo = "X";}
wissel = 0
}
return(xo);
}

function verdedig() {leeg = new Array(); verd = new Array();
for (i = 1; i < 10; i++) { oud = cel[i]; cel[i] = 1;
if ( (cel[1] + cel[2] + cel[3] == 3 ||
cel[4] + cel[5] + cel[6] == 3 ||
cel[7] + cel[8] + cel[9] == 3 ||
cel[1] + cel[4] + cel[7] == 3 ||
cel[2] + cel[5] + cel[8] == 3 ||
cel[3] + cel[6] + cel[9] == 3 ||
cel[1] + cel[5] + cel[9] == 3 ||
cel[3] + cel[5] + cel[7] == 3) && oud == 0
) { verd[verd.length] = i}
cel[i] = oud;
if (cel[i] == 0) {
if (keren != 1) {leeg[leeg.length] = i} else
if (cel[5] == 0) {leeg[0] = 5; leeg[1] = 10 - geklikt} else
if (i % 2 != 0) {leeg[leeg.length] = i}
};
}
}

function aanval() {aanv = new Array();
for (i = 1; i < 10; i++) { oud = cel[i]; cel[i] = 10;
if ( (cel[1] + cel[2] + cel[3] == 30 ||
cel[4] + cel[5] + cel[6] == 30 ||
cel[7] + cel[8] + cel[9] == 30 ||
cel[1] + cel[4] + cel[7] == 30 ||
cel[2] + cel[5] + cel[8] == 30 ||
cel[3] + cel[6] + cel[9] == 30 ||
cel[1] + cel[5] + cel[9] == 30 ||
cel[3] + cel[5] + cel[7] == 30) && oud == 0
) { aanv[aanv.length] = i}
cel[i] = oud;
}
}

function strategie() {strat = new Array();
for (i = 1; i < 10; i++) { oud = cel[i]; cel[i] = 10;
if ( (cel[1] + cel[2] + cel[3] == 20 ||
cel[4] + cel[5] + cel[6] == 20 ||
cel[7] + cel[8] + cel[9] == 20 ||
cel[1] + cel[4] + cel[7] == 20 ||
cel[2] + cel[5] + cel[8] == 20 ||
cel[3] + cel[6] + cel[9] == 20 ||
cel[1] + cel[5] + cel[9] == 20 ||
cel[3] + cel[5] + cel[7] == 20) && oud == 0
) {
if (keren != 3) {strat[strat.length] = i} else if (i % 2 != 0) {strat[strat.length] = i}
}
cel[i] = oud;
}
}

function wijzig(form,element){
wijziging(element.name);
element.value = xo;
beurt = wisselen(beurt);
form.beurten.value = wie;
verdedig(); aanval(); strategie(); win();
if (auto == 0 || wint == 1) {return} else {
timerID = setTimeout('zetten()',600)
}
}

initieer();

//-->
</Script>

<p><center>
<font face="arial, helvetica" size"-2">Free JavaScripts provided<br>
by <a href="http://javascriptsource.com">The JavaScript Source</a></font>
</center><p>

<!-- Script Size: 8.15 KB -->

#Faranak
جمعه 31 اردیبهشت 1389, 17:38 عصر
[quote=raziee;987099]توی این بازی که گفتید چه نیازی هست که اطلاعات به سمت سرور بره و برگرده.
من یه جستجوی کوچیک کردم و این کد رو از سایت http://javascript.internet.com/games/rob's-tic,-tac,-toe.html برداشتم

quote]/]
ممنون از راهنماییتون .امادر این کدوقفه وجود نداره .بازی من بین
دوتاکاربر نیست بلکه بین کاربر و کامپیوتر هست . که من این وقفه رو هنگام پاسخ گویی کامپیوتر یعنی رایت O می خوام .
اگه میشه کد در این زمینه برام بذارید
ممنون

KavoshGar_ir
جمعه 31 اردیبهشت 1389, 21:01 عصر
من یک ایده بهتری دارم ... خیلی دوستانه تر به مسئله نگاه کنیم:لبخند:

ساعت سیستم کلاینت را به ثانیه بگیرید و در یک متغییر ذخیره کنید حالا اگر قسمتی که خواستید 3 ثاینه بعد اجرا بشه را نمایش بدید کافیه زمان ابتدایی که گرفتید 3 ثانیه بهش اضافه کنید و بعد با یک شرط ساده چک کنید اگر برابر یا بیشتر بود مواردی که مد نظر شماست را به کاربر تحویل بدید ...

مثلا شما Step1 و Step2 را دارید Step2 را بعد از گذشت 3 ثانیه میخواهید نمایش بدید!

کاربر درخواست میده Step1 نمایش داده میشه زمان سیستمش 20.30.00 ثبت و ذخیره میشه

حالا اگر ساعت سیستمش برابر یا بیشتر از 20.30.03 بود Step2 نمایش داده بشه ...

#Faranak
شنبه 01 خرداد 1389, 00:20 صبح
چه طور می توان قسمت ثانیه ساعت رو به دست آورد و سه ثانیه به آن اضافه کرد؟

Peyman.Gh
شنبه 01 خرداد 1389, 00:44 صبح
چه طور می توان قسمت ثانیه ساعت رو به دست آورد و سه ثانیه به آن اضافه کرد؟
<script language="javascript" type="text/javascript">
function Second(){
var time = new Date();
var second = time.getSeconds();
second=second+3;
}
</script>

موفق باشید.