Table of Contents
网游练习总结(1),
账户激活
账户已激活
Home php教程 php手册 网游练习总结(1),

网游练习总结(1),

Jun 13, 2016 am 08:48 AM
China Summarize practise online games

网游练习总结(1),

最近一段时间在校也闲得没事干,反正是好长一段时间,干脆就做一个《中国象棋》网游耍耍打发时间。弄了好久没有写总结,以及整个过程中遇到的问题,今天就赶紧写一哈,难免后面就会忘了。

一、注册登录界面:

    可能会说这么简单的游戏,网上可能例子很多,也没有必要弄注册这样的功能,其实我只是学着玩玩哈。

关于注册我使用的是php与as3.0交互做的,有与php学的非常浅,也遇到了不少问题:

1.检测是否注册成功:这个也困了时间不是很长,但是觉得比较重要,我搜了一些资料找到的:

1

mysql_affected_rows()// 函数返回前一次 MySQL 操作所影响的记录行数。执行成功,则返回受影响的行的数目,如果最近一次查询失败的话,函数返回 -1。

Copy after login

2.邮箱激活验证:

1

2

3

4

5

6

7

8

9

10

11

12

13

14

15

16

17

18

19

20

21

22

23

24

25

26

27

28

29

30

31

32

33

34

35

36

37

38

39

40

41

42

43

44

45

46

47

48

49

50

51

52

53

54

55

56

57

58

59

60

61

62

63

64

65

66

67

68

69

70

71

72

73

74

75

76

77

78

79

80

81

82

83

84

85

86

87

88

89

90

91

92

93

94

95

96

97

98

99

100

101

102

103

104

105

106

107

108

109

110

111

112

113

114

115

116

117

118

119

120

121

122

123

124

125

126

127

128

129

130

131

132

133

134

135

136

137

138

139

140

141

142

143

144

145

146

147

148

149

150

151

152

153

154

155

156

157

158

159

160

161

162

163

164

165

166

167

168

169

170

171

172

173

174

175

176

177

178

179

180

181

182

183

184

185

186

187

188

189

190

191

192

193

194

195

196

197

198

199

200

201

202

203

204

205

206

207

208

209

210

211

212

213

214

215

216

217

218

219

220

221

222

223

224

225

226

227

228

229

230

231

232

233

234

235

236

237

238

239

240

241

242

243

244

245

246

247

248

249

250

251

252

253

254

255

256

257

258

259

260

261

262

263

264

265

266

267

268

269

270

271

272

273

274

275

276

277

278

279

280

281

282

283

284

285

286

287

288

289

290

291

292

293

294

295

296

297

298

299

300

301

302

303

304

305

306

307

308

309

310

311

312

313

314

315

316

317

318

319

320

321

322

323

324

325

326

327

328

329

330

331

332

333

334

335

336

337

338

339

340

341

342

343

344

345

346

347

348

349

350

351

352

353

354

355

356

357

358

359

360

361

362

363

364

365

366

367

368

369

370

371

372

373

374

375

376

377

378

379

380

381

382

383

384

385

386

387

388

389

390

391

392

393

394

395

396

397

398

399

400

401

402

403

404

405

406

407

408

409

410

411

412

413

414

415

416

417

418

419

420

421

422

423

424

425

426

427

428

429

430

431

432

433

434

435

436

437

438

439

440

441

442

443

444

445

446

447

448

449

450

451

452

453

454

455

456

457

458

459

460

461

462

<?php

class smtp

 

{

 

/* Public Variables */

 

var $smtp_port;

 

var $time_out;

 

var $host_name;

 

var $log_file;

 

var $relay_host;

 

var $debug;

 

var $auth;

 

var $user;

 

var $pass;

 

/* Private Variables */

var $sock;

 

/* Constractor */

 

function smtp($relay_host = "", $smtp_port = 25,$auth = false,$user,$pass)

 

{

 

$this->debug = FALSE;

 

$this->smtp_port = $smtp_port;

 

$this->relay_host = $relay_host;

 

$this->time_out = 30; //is used in fsockopen()

#

 

$this->auth = $auth;//auth

 

$this->user = $user;

 

$this->pass = $pass;

 

#

 

$this->host_name = "localhost"; //is used in HELO command

$this->log_file = "";

 

$this->sock = FALSE;

 

}

 

/* Main Function */

 

function sendmail($to, $from, $subject = "", $body = "", $mailtype, $cc = "", $bcc = "", $additional_headers = "")

 

{

 

$mail_from = $this->get_address($this->strip_comment($from));

 

$body = ereg_replace("(^|(\r\n))(\.)", "\1.\3", $body);

 

$header = "MIME-Version:1.0\r\n";

 

if($mailtype=="HTML"){

 

$header .= "Content-Type:text/html\r\n";

 

}

 

$header .= "To: ".$to."\r\n";

 

if ($cc != "") {

 

$header .= "Cc: ".$cc."\r\n";

 

}

 

$header .= "From: $from<".$from.">\r\n";

 

$header .= "Subject: ".$subject."\r\n";

 

$header .= $additional_headers;

 

$header .= "Date: ".date("r")."\r\n";

 

$header .= "X-Mailer:By Redhat (PHP/".phpversion().")\r\n";

 

list($msec, $sec) = explode(" ", microtime());

 

$header .= "Message-ID: <".date("YmdHis", $sec).".".($msec*1000000).".".$mail_from.">\r\n";

 

$TO = explode(",", $this->strip_comment($to));

 

if ($cc != "") {

 

$TO = array_merge($TO, explode(",", $this->strip_comment($cc)));

 

}

 

if ($bcc != "") {

 

$TO = array_merge($TO, explode(",", $this->strip_comment($bcc)));

 

}

 

$sent = TRUE;

 

foreach ($TO as $rcpt_to) {

 

$rcpt_to = $this->get_address($rcpt_to);

 

if (!$this->smtp_sockopen($rcpt_to)) {

 

$this->log_write("Error: Cannot send email to ".$rcpt_to."\n");

 

$sent = FALSE;

 

continue;

 

}

 

if ($this->smtp_send($this->host_name, $mail_from, $rcpt_to, $header, $body)) {

 

$this->log_write("E-mail has been sent to <".$rcpt_to.">\n");

 

} else {

 

$this->log_write("Error: Cannot send email to <".$rcpt_to.">\n");

 

$sent = FALSE;

 

}

 

fclose($this->sock);

 

$this->log_write("Disconnected from remote host\n");

 

}

 

return $sent;

 

}

 

/* Private Functions */

 

function smtp_send($helo, $from, $to, $header, $body = "")

 

{

 

if (!$this->smtp_putcmd("HELO", $helo)) {

 

return $this->smtp_error("sending HELO command");

 

}

 

#auth

 

if($this->auth){

 

if (!$this->smtp_putcmd("AUTH LOGIN", base64_encode($this->user))) {

 

return $this->smtp_error("sending HELO command");

 

}

 

if (!$this->smtp_putcmd("", base64_encode($this->pass))) {

 

return $this->smtp_error("sending HELO command");

 

}

 

}

 

#

 

if (!$this->smtp_putcmd("MAIL", "FROM:<".$from.">")) {

 

return $this->smtp_error("sending MAIL FROM command");

 

}

 

if (!$this->smtp_putcmd("RCPT", "TO:<".$to.">")) {

 

return $this->smtp_error("sending RCPT TO command");

 

}

 

if (!$this->smtp_putcmd("DATA")) {

 

return $this->smtp_error("sending DATA command");

 

}

 

if (!$this->smtp_message($header, $body)) {

 

return $this->smtp_error("sending message");

 

}

 

if (!$this->smtp_eom()) {

 

return $this->smtp_error("sending <CR><LF>.<CR><LF> [EOM]");

 

}

 

if (!$this->smtp_putcmd("QUIT")) {

 

return $this->smtp_error("sending QUIT command");

 

}

 

return TRUE;

 

}

 

function smtp_sockopen($address)

 

{

 

if ($this->relay_host == "") {

 

return $this->smtp_sockopen_mx($address);

 

} else {

 

return $this->smtp_sockopen_relay();

 

}

 

}

 

function smtp_sockopen_relay()

 

{

 

$this->log_write("Trying to ".$this->relay_host.":".$this->smtp_port."\n");

 

$this->sock = @fsockopen($this->relay_host, $this->smtp_port, $errno, $errstr, $this->time_out);

 

if (!($this->sock && $this->smtp_ok())) {

 

$this->log_write("Error: Cannot connenct to relay host ".$this->relay_host."\n");

 

$this->log_write("Error: ".$errstr." (".$errno.")\n");

 

return FALSE;

 

}

 

$this->log_write("Connected to relay host ".$this->relay_host."\n");

 

return TRUE;;

 

}

 

function smtp_sockopen_mx($address)

 

{

 

$domain = ereg_replace("^.+@([^@]+)$", "\1", $address);

 

if (!@getmxrr($domain, $MXHOSTS)) {

 

$this->log_write("Error: Cannot resolve MX \"".$domain."\"\n");

 

return FALSE;

 

}

 

 

foreach ($MXHOSTS as $host) {

 

$this->log_write("Trying to ".$host.":".$this->smtp_port."\n");

 

$this->sock = @fsockopen($host, $this->smtp_port, $errno, $errstr, $this->time_out);

 

if (!($this->sock && $this->smtp_ok())) {

 

$this->log_write("Warning: Cannot connect to mx host ".$host."\n");

 

$this->log_write("Error: ".$errstr." (".$errno.")\n");

 

continue;

 

}

 

$this->log_write("Connected to mx host ".$host."\n");

 

return TRUE;

 

}

 

$this->log_write("Error: Cannot connect to any mx hosts (".implode(", ", $MXHOSTS).")\n");

 

return FALSE;

 

}

 

function smtp_message($header, $body)

 

{

 

fputs($this->sock, $header."\r\n".$body);

 

$this->smtp_debug("> ".str_replace("\r\n", "\n"."> ", $header."\n> ".$body."\n> "));

 

return TRUE;

 

}

 

function smtp_eom()

 

{

 

fputs($this->sock, "\r\n.\r\n");

 

$this->smtp_debug(". [EOM]\n");

 

return $this->smtp_ok();

 

}

 

function smtp_ok()

 

{

 

$response = str_replace("\r\n", "", fgets($this->sock, 512));

 

$this->smtp_debug($response."\n");

 

if (!ereg("^[23]", $response)) {

 

fputs($this->sock, "QUIT\r\n");

 

fgets($this->sock, 512);

 

$this->log_write("Error: Remote host returned \"".$response."\"\n");

 

return FALSE;

 

}

 

return TRUE;

 

}

 

function smtp_putcmd($cmd, $arg = "")

 

{

 

if ($arg != "") {

 

if($cmd=="") $cmd = $arg;

 

else $cmd = $cmd." ".$arg;

 

}

 

fputs($this->sock, $cmd."\r\n");

 

$this->smtp_debug("> ".$cmd."\n");

 

return $this->smtp_ok();

 

}

 

function smtp_error($string)

 

{

 

$this->log_write("Error: Error occurred while ".$string.".\n");

 

return FALSE;

 

}

 

function log_write($message)

 

{

 

$this->smtp_debug($message);

 

if ($this->log_file == "") {

 

return TRUE;

 

}

 

$message = date("M d H:i:s ").get_current_user()."[".getmypid()."]: ".$message;

 

if (!@file_exists($this->log_file) || !($fp = @fopen($this->log_file, "a"))) {

 

$this->smtp_debug("Warning: Cannot open log file \"".$this->log_file."\"\n");

 

return FALSE;;

 

}

 

flock($fp, LOCK_EX);

 

fputs($fp, $message);

 

fclose($fp);

 

 

return TRUE;

 

}

 

 

function strip_comment($address)

 

{

 

$comment = "\([^()]*\)";

 

while (ereg($comment, $address)) {

 

$address = ereg_replace($comment, "", $address);

 

}

 

 

return $address;

 

}

 

 

function get_address($address)

 

{

 

$address = ereg_replace("([ \t\r\n])+", "", $address);

 

$address = ereg_replace("^.*<(.+)>.*$", "\1", $address);

 

return $address;

 

}

 

function smtp_debug($message)

 

{

 

if ($this->debug) {

 

echo $message;

 

}

 

}

 

}

 

?>

Copy after login

这个需要配置SMTP服务,现在QQ邮箱网易邮箱等都可以去设置,然后作为代理邮箱。

1

$smtp = new smtp($smtpserver,$smtpserverport,true,$smtpuser,$smtppass);<br />$smtp->debug = false;//关闭调试<br />$state = $smtp->sendmail($smtpemailto, $smtpusermail, $mailtitle, $mailcontent, $mailtype);<br />

Copy after login

在整个数据库操作过程中使用一个变量来监控是否出现操作错误,来返回是否注册成功;

1

error_reporting(E_ERROR | E_WARNING | E_PARSE);//屏蔽所有错误警告等

Copy after login

激活页面:

1

2

3

4

5

6

7

8

9

10

11

12

13

14

15

16

17

18

19

20

21

22

23

24

25

26

27

28

29

30

31

32

33

34

35

36

37

38

39

40

41

42

43

44

45

46

47

48

49

50

51

52

53

54

55

56

57

58

59

60

61

62

63

64

65

66

67

68

69

70

71

72

73

74

75

76

<?<span>php   

 </span><span>header</span>("Content-Type:text/html;charset=utf-8"<span>);

  

     </span><span>require_once</span> "sendEmail/mysqlInfo/sqlInfo.php"<span>;

     </span><span>$name</span>=<span>base64_decode</span>(<span>$_GET</span>['isdhf'<span>]);

       

      </span><span>if</span>(<span>$name</span>==""<span>)

      {

          </span><span>exit</span><span>();

      }</span><span>else</span><span>{

           

       

     </span><span>$con</span>=@<span>mysql_connect</span>(DB_USER,DB_ROOT,DB_PWD)or <span>die</span>('连接错误'<span>);

       </span><span>//</span><span>选择数据库</span>

       <span>mysql_select_db</span>(DB_NAME,<span>$con</span>)or <span>die</span>('Occured error'<span>);

       </span><span>mysql_query</span>('SET NAMES UTF8') or <span>die</span>('显示错误'<span>);

        

        </span><span>$sql</span>="SELECT isActivated FROM chinesechess WHERE nickname='{<span>$name</span>}'"<span>;

        </span><span>//</span><span>$row=@mysql_query($query) or die('error');</span>

        <span>$result</span>=<span>mysql_query</span>(<span>$sql</span>,<span>$con</span>)or <span>die</span>('error'<span>);

       </span><span>//</span><span>关闭数据库</span>

        <span>$arr</span>=<span>mysql_fetch_array</span>(<span>$result</span><span>);

        </span><span>if</span>(<span>$arr</span>['isActivated']=='0'<span>)

        {

          </span><span>//</span><span>如果没有激活,就输出激活页面,否则网页不存在;</span>

<span>echo</span>

'<span><head>

<meta http-equiv="Content-Type" content="text/html; charset=utf-8" />

<link rel="stylesheet" href="css/index_CSS.css" />

<style type="text/css">

body,td,th {

    font-size: xx-large;

    font-family: "Lucida Sans Unicode", "Lucida Grande", sans-serif;

}

</style>

<title>游戏注册[欢迎注册]</title>

  <script type="text/javascript">

                   function havedActivate()

                   {

                       var name=document.getElementById("nickname").title;

                       window.location.href="activated.php?key="+name;

                   }

        </script>

</head>

 

<body>

 <div id="tDiv">

   <table>

  <td></td>

   </table>

   <h2 id="账户激活">账户激活</h2>

   <p> </p>

   <table width="100%" border="0">

     <tr>

       <td id="tDL"><p>您的随机昵称为:<label id="nickname" title="</span>'.<span>$name</span>.'">"'.<span>$name</span>.'<span>"</label></p>

       <p> </p></td>

     </tr>

     <tr>

       <td align="center" id="tDL">

         <p>

           <input type="submit" value="确认激活" id="activateBtn" onClick="havedActivate();"/>

         </p>

       </td>

     </tr>

   </table>

   <p> </p>

 </div>

</body>

</html></span>'<span>;

            }</span><span>else</span><span>

            {

                </span><span>echo</span> "该网页不存在"<span>;

            }

    </span><span>mysql_close</span><span>();

    }

</span>?>

Copy after login

1

2

3

4

5

6

7

8

9

10

11

12

13

14

15

16

17

18

19

20

21

22

23

24

25

26

27

28

29

30

31

32

33

34

35

36

37

38

39

40

41

42

43

44

45

46

47

48

49

50

51

52

53

54

55

56

57

58

59

60

61

62

63

64

65

66

67

68

69

70

71

<?<span>php

  </span><span>header</span>("Content-Type:text/html;charset=utf-8"<span>);

     

    </span><span>require_once</span> "sendEmail/mysqlInfo/sqlInfo.php"<span>;

     

    </span><span>error_reporting</span>(<span>E_ERROR</span> | <span>E_WARNING</span> | <span>E_PARSE</span>);<span>//</span><span>禁止显示错误警号等</span>

     

   

    <span>$name</span>=<span>$_GET</span>['key'<span>];

    </span><span>if</span>(<span>$name</span>==""<span>)

    {

        </span><span>exit</span><span>();

    }</span><span>else</span><span>

    {

       </span><span>$con</span>=@<span>mysql_connect</span>(DB_USER,DB_ROOT,DB_PWD)or <span>die</span>('连接错误'<span>);

       </span><span>//</span><span>选择数据库</span>

       <span>mysql_select_db</span>(DB_NAME,<span>$con</span>)or <span>die</span>('Occured error'<span>);

       </span><span>mysql_query</span>('SET NAMES UTF8') or <span>die</span>('显示错误'<span>);

        

        </span><span>$sql</span>="UPDATE chinesechess SET isActivated='1' WHERE nickname='{<span>$name</span>}'"<span>;

        </span><span>$result</span> = <span>mysql_query</span>(<span>$sql</span>,<span>$con</span>) or <span>die</span>('error'<span>);

       </span><span>//</span><span>关闭数据库</span>

 

    <span>mysql_close</span><span>();

 </span><span>echo</span>'<span><html>

    <head>

        <meta charset="utf-8" />

        <title>账号已激活</title>

        <link rel="stylesheet" href="css/index_CSS.css" /></span>'<span>;

        </span><span>$name</span>="<span>

        <script type='text/javascript'>

        document.write(getName());

            function getName(){

                var str=window.location.search;

                var args=str.split('?');

                 var retval='';

                 if(args[0]==str){return '';}//参数为空;

                 return args[1].split('=')[1];

                }

        </script></span>"<span>;

    </span><span>echo</span> '<span></head>

    <body>

    <div id="tDiv">

   <table>

  <td></td>

   </table>

   <h2 id="账户已激活">账户已激活</h2>

   <p> </p>

   <table width="100%" border="0">

     <tr>

       <td id="tDL"><p>您的随机昵称为:<label></span>'.<span>$name</span>.'<span></label></p>

       <p> </p></td>

     </tr>

     <tr>

       <td align="center" id="tDL">

         <p>

           <p><font color="#FF0000">您的账号已激活,祝您游戏愉快!</font></p>

         </p>

       </td>

     </tr>

   </table>

   <p> </p>

 </div>

         

    </body>

</html></span>'<span>;

      }

 

 

 

</span>?>

Copy after login

CSS:

1

2

3

4

5

6

7

8

9

10

11

12

13

14

15

16

17

18

19

20

21

22

23

24

25

26

27

28

29

30

31

<span>@charset "utf-8";

</span><span>/*</span><span> CSS Document </span><span>*/</span><span>

h2</span>{<span>

    font-size</span>:<span>56px</span>;<span>

    font-weight</span>:<span>bold</span>;<span>

    text-align</span>:<span>center</span>;

}<span>

body</span>{<span>

    width</span>:<span>auto</span>;<span>

    height</span>:<span>auto</span>;<span>

    background-image</span>:<span>url(../images/03.png)</span>;<span>

    background-repeat</span>:<span>no-repeat</span>;<span>

    background-size</span>:<span>100% 100%</span>;<span>

    background-attachment</span>:<span>fixed</span>;<span>

    background-position</span>:<span>center</span>;

}<span>

#tDiv</span>{<span>

    background-image</span>:<span>url(../images/o1.png)</span>;<span>

    background-repeat</span>:<span>repeat</span>;<span>

    margin-left</span>:<span>auto</span>;<span>

    margin-right</span>:<span>auto</span>;<span>

    margin-top</span>:<span>200px</span>;<span>

    width</span>:<span>550px</span>;<span>

    height</span>:<span>auto</span>;<span>

    font-size</span>:<span>10px</span>;<span>

    border</span>:<span>2px solid #CCC</span>;

}<span>

#tDL</span>{<span>

    font-size</span>:<span>24px</span>;<span>

    text-align</span>:<span>center</span>;

}

Copy after login

登录:

1

2

3

4

5

6

7

8

9

10

11

12

13

14

15

16

17

18

19

20

21

22

23

24

25

26

27

28

29

30

31

32

33

34

35

36

37

38

39

40

41

42

43

44

45

46

47

48

49

50

51

52

53

54

55

56

57

58

<?<span>php

     </span><span>header</span>("Content-Type:text/html;charset=utf-8"<span>);

      

     </span><span>require_once</span> "sendEmail/mysqlInfo/sqlInfo.php"<span>;

      

     </span><span>error_reporting</span>(<span>E_ERROR</span> | <span>E_WARNING</span> | <span>E_PARSE</span>);<span>//</span><span>禁止显示错误警号等</span>

     <span>$sign</span>=''<span>;

        

     </span><span>$_email</span>=<span>$_POST</span>['_email'<span>];   

     </span><span>$_paswd</span>=<span>$_POST</span>['_pasd'<span>];

</span><span>//</span><span>     $_email="2810718058@qq.com";

//     $_paswd="1234567890";</span>

     <span>$_activate</span>='1';  <span>//</span><span>激活变量

     //连接数据库</span>

     <span>$con</span>=@<span>mysql_connect</span>(DB_USER,DB_ROOT,DB_PWD)or <span>die</span>('连接错误'<span>);

     

     </span><span>mysql_select_db</span>(DB_NAME,<span>$con</span>)or <span>die</span>('Occured error'<span>);

     </span><span>mysql_query</span>('SET NAMES UTF8') or <span>die</span>('显示错误'<span>);

     

    </span><span>$sql</span>="SELECT * FROM chinesechess WHERE user_email='{<span>$_email</span>}'and password='{<span>$_paswd</span>}' and isActivated='{<span>$_activate</span>}'"<span>;

    </span><span>$result</span> = <span>mysql_query</span>(<span>$sql</span>,<span>$con</span><span>);

    </span><span>$source</span>=<span>mysql_fetch_array</span>(<span>$result</span><span>);

 

     

    </span><span>if</span>(<span>$source</span><span>)

    {

        </span><span>$sign</span>="succeed"<span>;

         

         </span><span>$name</span>=<span>$source</span>['nickname'<span>];

     

         </span><span>$pasd</span>=<span>$source</span>['password'<span>];

     

         </span><span>$mail</span>=<span>$source</span>['user_email'<span>];

          

        </span><span>echo</span> 'strings=name='.<span>$name</span>.'<br/>'<span>;

        </span><span>echo</span> 'pasd='.<span>$pasd</span>.'<br/>'<span>;

        </span><span>echo</span> 'mail='.<span>$mail</span>.'<br/>'<span>;

        </span><span>echo</span> 'sign='.<span>$sign</span>.'<br/>'<span>;

    }</span><span>else</span><span>

    {

         </span><span>$sign</span>="faild"<span>;

         

         </span><span>$name</span>="null"<span>;

     

             </span><span>$pasd</span>="000000"<span>;

     

             </span><span>$mail</span>="null@cn.com"<span>;

          

        </span><span>echo</span> 'strings=name='.<span>$name</span>.'<br/>'<span>;

        </span><span>echo</span> 'pasd='.<span>$pasd</span>.'<br/>'<span>;

        </span><span>echo</span> 'mail='.<span>$mail</span>.'<br/>'<span>;

        </span><span>echo</span> 'sign='.<span>$sign</span>.'<br/>'<span>;

         

    }

         

    </span><span>mysql_close</span><span>();

 

</span>?>

Copy after login

Resource id #num

由于本人是一枚初学者,对mysql查询返回值等理解不够,遇到了一点困惑,mysql_query() 仅对 SELECT,SHOW,EXPLAIN 或 DESCRIBE 语句返回一个资源标识符,如果查询执行不正确则返回 FALSE。要使用mysql_fatch_array()函数或者mysql_fetch_object()函数进行转换,然后对相应数组或者对象进行操作。

总的来说这部分遇到的困难也不是很多,经过自己的努力很快就解决了。

 

Statement of this Website
The content of this article is voluntarily contributed by netizens, and the copyright belongs to the original author. This site does not assume corresponding legal responsibility. If you find any content suspected of plagiarism or infringement, please contact admin@php.cn

Hot AI Tools

Undresser.AI Undress

Undresser.AI Undress

AI-powered app for creating realistic nude photos

AI Clothes Remover

AI Clothes Remover

Online AI tool for removing clothes from photos.

Undress AI Tool

Undress AI Tool

Undress images for free

Clothoff.io

Clothoff.io

AI clothes remover

Video Face Swap

Video Face Swap

Swap faces in any video effortlessly with our completely free AI face swap tool!

Hot Tools

Notepad++7.3.1

Notepad++7.3.1

Easy-to-use and free code editor

SublimeText3 Chinese version

SublimeText3 Chinese version

Chinese version, very easy to use

Zend Studio 13.0.1

Zend Studio 13.0.1

Powerful PHP integrated development environment

Dreamweaver CS6

Dreamweaver CS6

Visual web development tools

SublimeText3 Mac version

SublimeText3 Mac version

God-level code editing software (SublimeText3)

'Elsword' Lydia's third branch opens, crazy researcher comes online 'Elsword' Lydia's third branch opens, crazy researcher comes online Apr 24, 2024 pm 02:25 PM

On April 24, the two-dimensional anime fighting online game "Elsword" will open a new career for Lydia. The crazy researcher who is obsessed with rifts and attracted by taboos will bring players a new experience! "Elsword"'s latest character "Lydia" has attracted the love and pursuit of the majority of players with its unique independent plot, village and dungeon. She is a highly mobile character with a unique ice ax weapon and exclusive hook rope. The character uses the magic of the ore to launch exciting attacks, bringing players a very refreshing passion for adventure! This time, Lidya’s third branch of career—crazy researcher—is open. Let’s find out about it together! The "Elsword" game has four branches of growth routes for each character. Each branch has a different plot direction and characteristics. Players can choose

How to practice typing with Kingsoft Typing Guide - How to practice typing with Kingsoft Typing Guide How to practice typing with Kingsoft Typing Guide - How to practice typing with Kingsoft Typing Guide Mar 18, 2024 pm 04:25 PM

Nowadays, many friends like to use Kingsoft Typing Assistant, but the typing speed seriously affects work efficiency, so I teach you to practice typing speed. So how to use Kingsoft Typing Assistant to practice typing? Today, the editor will give you a tutorial on how to practice typing numbers with Kingsoft Typing Assistant. The following is described, I hope it will be helpful to everyone. First, open the Kingsoft typing software, then click the (Getting Started) button with your mouse, then click the (Number Keys) button in a new window, then click the (Start from Scratch) button below to practice, or click the (Test Mode) button. , just enter numbers for practice. In addition, Kingsoft Typing Assistant has other functions that can help you practice typing better. 1. Select practice mode: On the software interface, you can see that there are different practice modes, such as &quot;New

Summarize the usage of system() function in Linux system Summarize the usage of system() function in Linux system Feb 23, 2024 pm 06:45 PM

Summary of the system() function under Linux In the Linux system, the system() function is a very commonly used function, which can be used to execute command line commands. This article will introduce the system() function in detail and provide some specific code examples. 1. Basic usage of the system() function. The declaration of the system() function is as follows: intsystem(constchar*command); where the command parameter is a character.

Zhengtu IPx classic animation 'Journey to the West' The journey to the west is fearless and fearless Zhengtu IPx classic animation 'Journey to the West' The journey to the west is fearless and fearless Jun 10, 2024 pm 06:15 PM

Journey through the vastness and set foot on the journey to the west! Today, Zhengtu IP officially announced that it will launch a cross-border cooperation with CCTV animation "Journey to the West" to jointly create a cultural feast that combines tradition and innovation! This cooperation not only marks the in-depth cooperation between the two major domestic classic brands, but also demonstrates the unremitting efforts and persistence of the Zhengtu series on the road of promoting Chinese traditional culture. Since its birth, the Zhengtu series has been loved by players for its profound cultural heritage and diversified gameplay. In terms of cultural inheritance, the Zhengtu series has always maintained respect and love for traditional Chinese culture, and skillfully integrated traditional cultural elements into the game, bringing more fun and inspiration to players. The CCTV animation "Journey to the West" is a classic that has accompanied the growth of generations.

The martial arts PK is greatly upgraded! 'World of Swordsman: Origin' cross-server sect competition launched The martial arts PK is greatly upgraded! 'World of Swordsman: Origin' cross-server sect competition launched Mar 30, 2024 am 11:36 AM

Masters compete with each other and fight to the end! Zhang Weijian enthusiastically endorses the "Swordsman World: Origin" mobile game, a work inherited from the 26-year swordsman relationship in Xishanju, and the cross-server sect competition is now open! With the flash of swords and shadows of swords, heroes emerge in large numbers. The top masters from all servers gather in the cross-server arena to compete for the supreme honor of the first cross-server sect. It is very lively! The sect competition, the moves are full of blood! In the 12 sects of "Swordsman World: Origin" Among them, swords, spears, swords, halberds, fists, palms and sticks all have their own unique moves! For example, the Tang Clan faction used poison-tempered hidden weapons to kill people with one blow; the Five Poisons faction used poisoning techniques to kill people invisibly; the Cuiyan faction used concealed figures to surprise people with swords; the Heavenly King faction used close-quarters hand-to-hand combat to compete... ...There are also hundreds of martial arts secrets such as Yiyangzhi, Lingbo Weibu, and Eighteen Dragon Subduing Palms. The five elements restrain each other, one sect has two routes, and the battle

Continuous slashing with hot blood, fight to the fullest! "Swordsman World: Origin" cross-server Song and Jin war begins Continuous slashing with hot blood, fight to the fullest! "Swordsman World: Origin" cross-server Song and Jin war begins Mar 21, 2024 pm 03:20 PM

The sword is drawn across the horse, and the sword cuts through thousands of troops! Recommended by Zhang Weijian, Xishanju's 26-year-old production of &quot;Swordsman World: Origin&quot; mobile game Song and Jin battlefields has received a new upgrade, opening up cross-server challenges. A larger battlefield scale, a new battle map, and interesting battle mechanisms provide a larger and fairer &quot;martial arts&quot; platform for heroes to compete and communicate! In addition, winners who meet the conditions can also advance to participate in the &quot;monthly mode&quot; to compete with top players from all servers. Super Burning PK is now open, come and have fun together! Flags are flying, war drums are thundering! The cross-server Song and Jin battlefields are getting a major upgrade! Cross-server Song and Jin will use a new map, which not only has 1.5 times the area of ​​the existing map and a wider central battlefield, but also worth mentioning is that the new map shortens the original &quot;blocking tigers&quot; of the upper, middle and lower roads, Da Xia

The Tomb Sect appears! 'Swordsman World: Origin' 'Tomb Sword Shadow' expansion pack launched on 6.20 The Tomb Sect appears! 'Swordsman World: Origin' 'Tomb Sword Shadow' expansion pack launched on 6.20 Jun 11, 2024 pm 02:25 PM

The sword shadow of the ancient tomb, the battle of Iron Floating City! The new expansion pack of the "Swordsman World: Origin" mobile game "Tomb Sword Shadow", which has been inherited for 26 years by Xishanju Swordsman, will be launched on June 20th. The ancient tomb of the thirteenth sect was born, the Iron Floating City was rekindled, and you climbed up to the Thousand-Story Tower to challenge your limits. The server with tens of thousands of people is about to be opened. Many beauties are helping out, and many new version highlights are waiting for you to experience. Jinghongying, ruthless sword, the thirteenth sect of the "Swordsman World: Origin" mobile game - the Tomb Sect makes its debut. The disciples of the Ancient Tomb Sect are all women with refined appearance. They practice in seclusion all year round and do not get involved in political affairs. The advent of the Tomb Sect will bring about two new schools of swordsmanship and acupuncture. Swordsmanship is good at long-range bursts, while acupuncture focuses on melee combat. The unique skills and fighting style of swordsmanship and acupuncture will be great for everyone.

Who is the spokesperson? 'Jianxia World: Origin' new sect five poison skills revealed for the first time Who is the spokesperson? 'Jianxia World: Origin' new sect five poison skills revealed for the first time Feb 27, 2024 pm 04:40 PM

All kinds of poison are invisible and evil, and they charm people's hearts. The annual version of Xishanju's "Swordsman World: Origin" mobile game will be officially open to the public on March 6. The new spokesperson's suspense poster is released today. The mysterious silhouette and shape have triggered a lot of speculation! In addition, the new sect's Five Poison skills were revealed for the first time. The Master of the Five Poisons is remotely controlled and has strong strength in single combat. The Master of the Five Poisons is an auxiliary maneuver and is good at controlling the field in team battles! The Five Poison Techniques hurt people invisible, perfectly explaining what it is to be the Gu King of Jianghu! The new spokesperson suspense poster of "Jianxia World: Origin" is officially announced today! The poster uses orange-red as the main color, and the golden title is eye-catching, and the word "big event" is even more exciting. The menacing dragon hovers around the screen, seeming to imply that someone like a dragon will appear in the world and stir up troubles in all directions. A figure in the center of the picture

See all articles