+ -
当前位置:首页 → 问答吧 → 一个刚用php写的桌面应用程序,贴出来大家看看

一个刚用php写的桌面应用程序,贴出来大家看看

时间:2006-09-14

来源:互联网

用winbinder做的,对桌面应用程序感兴趣的朋友可以找我交流阿。


[ 本帖最后由 machine_马 于 2007-5-30 10:19 编辑 ]

作者: machine_马   发布时间: 2006-09-14

21point.form.php文件
复制PHP内容到剪贴板
PHP代码:

<?php
$winmain=wb_create_window(null,AppWindow,'21点游戏',WBC_CENTER,WBC_CENTER,800,495,0,0);
wb_create_control($winmain,Label,'庄家',20,15,40,30,LB_1,0,0,0);
wb_create_control($winmain,Label,'玩家',20,200,40,30,LB_2,00,0,0);
wb_create_control($winmain,Frame,'',80,40,120,150,FR_PC_1,0,0,0);
wb_create_control($winmain,Frame,'',220,40,120,150,FR_PC_2,0,0,0);
wb_create_control($winmain,Frame,'',360,40,120,150,FR_PC_3,0,0,0);
wb_create_control($winmain,Frame,'',500,40,120,150,FR_PC_4,0,0,0);
wb_create_control($winmain,Frame,'',640,40,120,150,FR_PC_5,0,0,0);
wb_create_control($winmain,Frame,'',645,230,120,150,FR_U_5,0,0,0);
wb_create_control($winmain,Frame,'',500,230,120,150,FR_U_4,0,0,0);
wb_create_control($winmain,Frame,'',360,230,120,150,FR_U_3,0,0,0);
wb_create_control($winmain,Frame,'',220,230,120,150,FR_U_2,0,0,0);
wb_create_control($winmain,Frame,'',80,230,120,150,FR_U_1,0,0,0);
wb_create_control($winmain,Label,'',35,305,25,20,LB_U_T,0,0,0);
wb_create_control($winmain,Label,'',35,110,25,20,LB_P_T,0,0,0);
wb_create_control($winmain,PushButton,'发牌',320,400,70,25,B_GO,0x00000002,0,0);
wb_create_control($winmain,PushButton,'停止',435,400,70,25,B_CHANGE,0x00000002,0,0);
wb_create_control($winmain,Label,'',110,95,60,60,LB_PC_1,0x00000800,0,0);
wb_create_control($winmain,Label,'',250,95,60,60,LB_PC_2,0x00000800,0,0);
wb_create_control($winmain,Label,'',390,95,60,60,LB_PC_3,0x00000800,0,0);
wb_create_control($winmain,Label,'',530,95,60,60,LB_PC_4,0x00000800,0,0);
wb_create_control($winmain,Label,'',670,95,60,60,LB_PC_5,0x00000800,0,0);
wb_create_control($winmain,Label,'',110,285,60,60,LB_U_1,0x00000800,0,0);
wb_create_control($winmain,Label,'',250,285,60,60,LB_U_2,0x00000800,0,0);
wb_create_control($winmain,Label,'',390,285,60,60,LB_U_3,0x00000800,0,0);
wb_create_control($winmain,Label,'',530,285,60,60,LB_U_4,0x00000800,0,0);
wb_create_control($winmain,Label,'',670,285,60,60,LB_U_5,0x00000800,0,0);
wb_create_control($winmain,Label,'',70,20,90,20,PC_MON,0,0,0);
wb_create_control($winmain,Label,'',70,205,90,20,U_MON,0,0,0);
?>

[ 本帖最后由 machine_马 于 2006-12-9 23:41 编辑 ]

作者: machine_马   发布时间: 2006-09-14

point_include.php文件
复制PHP内容到剪贴板
PHP代码:

<?php
for ($i=1;$i<=13;$i++){
switch($i){
  case 1j=1;$key='A';break;
  case 11j=10;$key='J';break;
  case 12j=10;$key='Q';break;
  case 13j=10;$key='K';break;
  default:
   $key=$j=$i;
}
$card["黑\n桃\n$key"]=$j;
$card["红\n桃\n$key"]=$j;
$card["梅\n花\n$key"]=$j;
$card["方\n片\n$key"]=$j;
}
$contorl_id=array(
'B_GO'=>1001,'B_CHANGE'=>1002,
'ME_START'=>2001,'ME_REMON'=>2002,'ME_AUTHOR'=>2003,'ME_QUIT'=>IDCLOSE,
'LB_1'=>3001,'LB_2'=>3002,'LB_U_T'=>3003,'LB_P_T'=>3004,
'PC_MON'=>3005,'U_MON'=>3006,
'LB_PC_1'=>3101,'LB_PC_2'=>3102,'LB_PC_3'=>3103,'LB_PC_4'=>3104,'LB_PC_5'=>3105,
'LB_U_1'=>3201,'LB_U_2'=>3202,'LB_U_3'=>3203,'LB_U_4'=>3204,'LB_U_5'=>3205,
'FR_PC_1'=>4001,'FR_PC_2'=>4002,'FR_PC_3'=>4003,'FR_PC_4'=>4004,'FR_PC_5'=>4005,
'FR_U_1'=>5001,'FR_U_2'=>5002,'FR_U_3'=>5003,'FR_U_4'=>5004,'FR_U_5'=>5005,
);
foreach ($contorl_id as $key=>$value){
if(!defined(strtoupper($key)))define(strtoupper($key),$value);
}
?>

[ 本帖最后由 machine_马 于 2006-12-9 23:41 编辑 ]

作者: machine_马   发布时间: 2006-09-14

21point.phpw文件
复制PHP内容到剪贴板
PHP代码:

<?php
set_time_limit(0);
include_once('include/winbinder.php');
include_once('form/point_include.php');
include_once('form/21point.form.php');

class Ponit {
public $key_id;
private $user_point=10000;
private $pc_point=10000;
private $card;
private $player='user';
private $new_term=false;
private $remon=false;
public function __construct($winmain,$card){
  $f=file_get_contents('form/db.db');
  list($this->user_point,$this->pc_point)=explode('|',$f);
  $this->window=$winmain;
  $this->card=$card;
  $this->prepare();
}
private function prepare(){
  wb_set_image($this->window,'form/hyper.ico');  
  wb_create_control($this->window,Menu,array(
  '游戏(&G)'  , null,
  array(ME_START , "开局\tCrtl+N",'','','Ctrl+N'),
  array(ME_REMON , "重计分"),
  array(ME_AUTHOR , "作者"),
  null   ,
  array(ME_QUIT , "退出\tCrtl+Q",'','','Ctrl+Q'),
  null
  ));
  wb_set_text(wb_get_control($this->window,U_MON),$this->user_point.'分');
  wb_set_text(wb_get_control($this->window,PC_MON),$this->pc_point.'分');
  $font=wb_create_font("Arial", 13, null, FTA_BOLD);
  wb_set_font(wb_get_control($this->window,LB_1),$font);
  wb_set_font(wb_get_control($this->window,LB_2),$font);
  $font=wb_create_font("Arial", 34, null, FTA_BOLD);
  for($i=1;$i<=5;$i++){
   wb_set_font(wb_get_control($this->window,(3100+$i)),$font);
   wb_set_font(wb_get_control($this->window,(3200+$i)),$font);
  }
}
private function start(){
  $this->player='user';
  $this->new_term=true;
  $this->clear();
  $this->play();
  wb_set_enabled(wb_get_control($this->window,B_GO),true);
  wb_set_enabled(wb_get_control($this->window,B_CHANGE),true);
}
private function stop(){
  wb_set_enabled(wb_get_control($this->window,B_GO),false);
  wb_set_enabled(wb_get_control($this->window,B_CHANGE),false);
}
private function change_player(){
  $this->stop();
  $this->player='pc';
  $this->play();
}
private function total($num=0,$win){
  static $u_tem,$p_tem;
  if(empty($u_tem)||empty($p_tem)||$this->remon==true){
   $u_tem=$this->user_point;
   $p_tem=$this->pc_point;
   $this->remon=false;
  }
  if(strtoupper($win)=='U'){
   $u_tem+=$num;
   $p_tem-=$num;
  }else{
   $u_tem-=$num;
   $p_tem+=$num;
  }
  $this->user_point=$u_tem;
  $this->pc_point=$p_tem;
  wb_set_text(wb_get_control($this->window,U_MON),$this->user_point.'分');
  wb_set_text(wb_get_control($this->window,PC_MON),$this->pc_point.'分');
  $f=fopen('form/db.db','wb');
  fwrite($f,$this->user_point."|".$this->pc_point);
  fclose($f);
}
private function remon(){
  $this->remon=true;
  $this->user_point=10000;
  $this->pc_point=10000;
  wb_set_text(wb_get_control($this->window,U_MON),$this->user_point.'分');
  wb_set_text(wb_get_control($this->window,PC_MON),$this->pc_point.'分');
  $f=fopen('form/db.db','wb');
  fwrite($f,$this->user_point."|".$this->pc_point);
  fclose($f);
}
private function clear(){
  wb_set_text(wb_get_control($this->window,LB_U_T),'');
  wb_set_text(wb_get_control($this->window,LB_P_T),'');
  for($i=1;$i<=5;$i++){
   wb_set_text(wb_get_control($this->window,(4000+$i)),'');
   wb_set_text(wb_get_control($this->window,(5000+$i)),'');
   wb_set_text(wb_get_control($this->window,(3100+$i)),'');
   wb_set_text(wb_get_control($this->window,(3200+$i)),'');
  }
}
private function play(){
  static $card_tem=array(),$i=0,$j=0,$user_total=0,$pc_total=0;
  if($this->new_term==true){
   $card_tem=$this->card;
   $this->new_term=false;
   $user_total=0;
   $pc_total=0;
   $i=0;$j=0;
  }
  if($this->player=='user'){
   $i++;
   $card_key=array_rand($card_tem);
   $card_value=$card_tem[$card_key];
   $user_total+=$card_value;
   wb_set_text(wb_get_control($this->window,LB_U_T),$user_total.'点');
   wb_set_text(wb_get_control($this->window,(5000+$i)),$card_key);
   wb_set_text(wb_get_control($this->window,(3200+$i)),$card_value);
   if($i>=5 && $user_total<=21){
    $this->total(20,'U');
    $sel=wb_message_box($this->window,"恭喜你,5张全小,玩家获胜!\n您还想继续玩吗?",'胜利',WBC_YESNO);
    $sel==1?$this->start():$this->stop();
   }elseif($user_total>21){
    $this->total(20,'P');
    $sel=wb_message_box($this->window,"真不幸,超过21点,庄家获胜!\n您还想继续玩吗?",'失败',WBC_YESNO);
    $sel==1?$this->start():$this->stop();
   }
  }else{
   $j++;
   $card_key=array_rand($card_tem);
   $card_value=$card_tem[$card_key];
   $pc_total+=$card_value;
   wb_set_text(wb_get_control($this->window,LB_P_T),$pc_total.'点');
   wb_set_text(wb_get_control($this->window,(4000+$j)),$card_key);
   wb_set_text(wb_get_control($this->window,(3100+$j)),$card_value);
   if($j>=5 && $pc_total<=21){
    $this->total(20,'P');
    $sel=wb_message_box($this->window,"庄家5张全小,庄家获胜!\n您还想继续玩吗?",'失败',WBC_YESNO);
    $sel==1?$this->start():$this->stop();
   }elseif($pc_total>21){
    if( $pc_total-$card_value<$user_total){
     $this->total(20,'U');
     $sel=wb_message_box($this->window,"恭喜你,庄家点数超过21点,玩家获胜!\n您还想继续玩吗?",'胜利',WBC_YESNO);
     $sel==1?$this->start():$this->stop();
    }else{
     $pc_total=$pc_total-$card_value;
     wb_set_text(wb_get_control($this->window,LB_P_T),$pc_total.'点');
     wb_set_text(wb_get_control($this->window,(4000+$j)),'');
     wb_set_text(wb_get_control($this->window,(3100+$j)),'');
     if($pc_total>=$user_total){
      $this->total(20,'P');
      $msg=($pc_total==$user_total)?"双方点数一样,庄家获胜!\n您还想继续玩吗?":"庄家点数比你大,庄稼获胜!\n您还想继续玩吗?";
      $sel=wb_message_box($this->window,$msg,'失败',WBC_YESNO);
      $sel==1?$this->start():$this->stop();
     }else{
      $this->total(20,'U');
      $sel=wb_message_box($this->window,"恭喜你,庄家点数比你小,玩家获胜!\n您还想继续玩吗?",'胜利',WBC_YESNO);
      $sel==1?$this->start():$this->stop();
     }
    }
   }else{
    usleep(800000);
    $this->play();
   }
  }
  unset($card_tem[$card_key]);
}

private function author(){
  $inf="大家好,偶是machine_马,\n\n这是我人生中的第一个桌面应用程序,\n\n做得很烂,大家见笑了,哈哈哈^_^。\n\n\n\n\t\t作者:machine_马";
  $author_window=wb_create_window($this->window,ModalDialog,'作者简介',WBC_CENTER, WBC_CENTER, 360, 180, 0x00000000, 0);
  wb_set_handler($author_window,'author_handler');
  $image=wb_create_control($author_window,Frame,'123',0,0,128,144,110,WBC_IMAGE);
  wb_create_control($author_window,Label,$inf,140,20,200,150,120,WBC_IMAGE);
  wb_set_image($image, 'form/author.bmp', NOCOLOR);
}
public function main(){
  switch ($this->key_id){
   case IDCLOSE:
    wb_destroy_window($this->window);    break;
   case ME_START:
    $this->start();         break;
   case ME_AUTHOR:
    $this->author();        break;
   case B_GO:
    $this->play();         break;
   case B_CHANGE:
    $this->change_player();       break;
   case ME_REMON:
    $this->remon();         break;
  }
}
}
$wbd=new Ponit($winmain,$card);
wb_set_handler($winmain,'go_to');
wb_main_loop();
function go_to($window,$id){
global $wbd;
$wbd->key_id=$id;
return $wbd->main();
}
function author_handler($this_window,$id){
switch($id){
  case IDCLOSE:
   wb_destroy_window($this_window);
}
}
?>

[ 本帖最后由 machine_马 于 2006-12-9 23:42 编辑 ]

作者: machine_马   发布时间: 2006-09-14

强啊

作者: dwp34998   发布时间: 2006-09-14

做得不错,楼主,继续努力

作者: EastSon   发布时间: 2006-09-14

;P ;P

作者: 单眼皮的猪   发布时间: 2006-09-14

怎么运行啊?

作者: softly   发布时间: 2006-09-14

感觉有点舍本求末的味道,不过还是要顶下.

作者: S!rius   发布时间: 2006-09-14

php5?

作者: boom123   发布时间: 2006-09-14

界面的美工是怎么处理的啊?

作者: cslogin   发布时间: 2006-09-14

GTK?
Writing desktop applications. PHP is probably not the very best language to create a desktop application with a graphical user interface, but if you know PHP very well, and would like to use some advanced PHP features in your client-side applications you can also use PHP-GTK to write such programs. You also have the ability to write cross-platform applications this way. PHP-GTK is an extension to PHP, not available in the main distribution. If you are interested in PHP-GTK, visit » its own website.

作者: cysin   发布时间: 2006-09-15

有看过一个老外通过Apache并内置IE解析器来做桌面应用程序的。
不知这个是如何实现的???

作者: lark3   发布时间: 2006-09-15

好人 给点桌面应用的入门指导吧,没事大家开发小游戏玩。。

作者: cheerfans   发布时间: 2006-09-16

winbinder.php 在哪?

作者: betterp   发布时间: 2006-09-16

找到了...看看

作者: betterp   发布时间: 2006-09-16

牛人

作者: 115300111   发布时间: 2006-09-16

不错!

作者: h058   发布时间: 2006-09-17

有兴趣的可以到winbinder的官方网站看看
http://www.winbinder.com
我最近在写winbinder的中文手册,等写得差不多了就贴上来

作者: machine_马   发布时间: 2006-09-19

:lol 好啊

作者: gaotian   发布时间: 2006-09-19

好强啊。想不到用PHP做桌面程序。最好也可以LINUX下开发一些。就不错啦。看来学PHP还是有前途的啦。

作者: houyue   发布时间: 2006-09-19

哪里down

作者: fnet   发布时间: 2006-09-19

这里下载http://winbinder.org/download.php

作者: machine_马   发布时间: 2006-09-20

楼主我愿意加入翻译,麻烦加我QQ

作者: gabin   发布时间: 2006-09-21

只能远观

作者: scorpion   发布时间: 2006-09-22

引用:
原帖由 machine_马 于 2006-9-19 12:02 发表
有兴趣的可以到winbinder的官方网站看看
http://www.winbinder.com
我最近在写winbinder的中文手册,等写得差不多了就贴上来
期待

作者: fengyun   发布时间: 2006-09-22

强啊,期待作者的手册,俺也学习开发个小游戏.

作者: liefengzi   发布时间: 2006-09-23

强啊.........暴强!!!!:D

作者: visam   发布时间: 2006-10-06

严重支持。。。。。

作者: visam   发布时间: 2006-10-20

LZ强啊~~~学习中

作者: tingoooo   发布时间: 2006-10-20

用PHP写桌面程序?
现实吗?

作者: 馒头   发布时间: 2006-10-30

也是一种PHP的应用,PHP开源,自己做不同的发展方向,顶一下。

作者: Per   发布时间: 2006-10-31

winbinder是什么东东??IDE?去看看

作者: bingowill   发布时间: 2006-11-03

:D 不错

作者: ylhp   发布时间: 2006-11-09

很想看看什么样,可是图片挂了

作者: paperassword   发布时间: 2007-05-28

我已将程序发给你

作者: machine_马   发布时间: 2007-05-30

引用:
原帖由 machine_马 于 2007-5-30 10:19 发表
我已将程序发给你
我已收到,多谢!

作者: paperassword   发布时间: 2007-05-30

没有前离

作者: qai41   发布时间: 2008-01-21

  十分好。强烈支持出教程。我也好学习下。呵呵~

作者: 逆雪寒   发布时间: 2008-01-23

引用:
原帖由 dwp34998 于 2006-9-14 09:48 发表
强啊

作者: streen003   发布时间: 2008-01-28

好帖,支持楼主,收藏备用

作者: yiyun8541   发布时间: 2008-04-14

作者: flourish   发布时间: 2008-04-23

貌似很强

作者: gesea   发布时间: 2008-04-24

不懂怎么弄

作者: licrazy   发布时间: 2008-05-03