如何点击Button改变颜色

鼠标点击Button1改变颜色,点击Button2恢复颜色,Button2改变颜色

10个回答

html代码:
按钮1
按钮2
js原生代码:
window.onload = function(){
document.getElementById("btn1").onclick=function(){
this.style.background = "red";
document.getElementById("btn2").style.background = '#FFF';
}
document.getElementById("btn2").onclick=function(){
this.style.background = "red";
document.getElementById("btn1").style.background = '#FFF';
}
}

$("#button").click(function(){$(this).addClass("bg").sblings.removeClass("bg")})
.bg{background-color:red;}

通过点击事件,利用css来解决

这是js干啥 一段简单的css就能做到呀

 <!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <title>Title</title>
    <style>
        .button{
            border:none;
            width:100px;
            height:40px;
            background: #0a56bb;
            color: #fff;
        }
        .button:focus{

            outline: none;
            background-color: #f00283;
        }
    </style>
</head>
<body>

<button class="button item1">第一个按钮</button>
<button class="button item2">第二个按钮</button>
<button class="button item3">第三个按钮</button>

</body>
</html>
q213546879
/*----无忧----*/ 回复_高山流水__: 还好还好
2 年多之前 回复
a782492184
_高山流水__ 厉害 长知识
2 年多之前 回复

你用的什么语言来实现?
改变背景色,还是按钮的颜色
android,java awt有直接设置颜色的方法,
百度就有

点击按钮使用不同的样式。

  1. * > ## # __

是什么语言呀?html里吗?改变css?

qq_39782108
qq_39782108 谢谢,我已解决,最近没有看评论,Button 下默认Color Tint 改成了Sprite Swap
2 年多之前 回复

你用的什么语言来实现?
改变背景色,还是按钮的颜色

qq_39782108
qq_39782108 我有点没说清楚,现在已解决,Button 下默认Color Tint 改成了Sprite Swap
2 年多之前 回复
Csdn user default icon
上传中...
上传图片
插入图片
抄袭、复制答案,以达到刷声望分或其他目的的行为,在CSDN问答是严格禁止的,一经发现立刻封号。是时候展现真正的技术了!
其他相关推荐
C# button 点击改变背景颜色 怎么给初始化button使颜色处于点击前的状态
public partial class Form1 : Form     {         public Form1()         {             InitializeComponent();             this.button1.Enter += button_Enter;             this.button1.Leave += button_Leave;             this.button2.Enter += button_Enter;             this.button2.Leave += button_Leave;             //继续写其他的         }         void button_Leave(object sender, EventArgs e)         {             (sender as Button).BackColor = SystemColors.Control;         }         void button_Enter(object sender, EventArgs e)         {             (sender as Button).BackColor = Color.Red;         }     }![图片说明](https://img-ask.csdn.net/upload/201709/16/1505545831_129633.png) ``` ```
js怎么设置按钮点击后改变颜色
我已经设置好三个按钮,怎么设置js可以实现点击按钮后。此按钮颜色改变,其他2个按钮颜色不变。 ``` <!DOCTYPE html> <html> <head> <title></title> </head> <script src="js/jquery-1.10.2.min.js" type="text/javascript" charset="utf-8"></script> <script> $(function(){ $("#btn1").click(function() { $("#content1").toggle(); var str = btn.innerHTML =="按钮1"? "显示":"按钮1"; btn.innerHTML =str; }); $("#btn2").click(function() { $("#content2").toggle(); var str = btn.innerHTML =="隐藏"? "显示":"隐藏"; btn.innerHTML =str; }); $("#bt3").click(function() { $("#content3").toggle(); var str = btn.innerHTML =="隐藏"? "显示":"隐藏"; btn.innerHTML =str; }); }); </script> <body> <button id="btn1" >第一页1</button> <button id="btn2" >第二页2</button> <button id="btn3" >第三页</button> <p id="content1">1也许明天,也许梦里,我重新拾起我最爱的诗,感动了所有的风和日丽</p> <p id="content2">2也许明天,也许梦里,我重新拾起我最爱的诗,感动了所有的风和日丽</p> <p id="content3">3也许明天,也许梦里,我重新拾起我最爱的诗,感动了所有的风和日丽</p> </body> </html> ```
windows8点击按钮改变按钮border边框颜色
大家好,我正在学习windows8的应用开发,用XAML开发的 我想做个连连看的应用,用户点击一张图片,那么这张图片边框颜色发生改变。 我设定的界面是一个6x6的网格,每个网格一张图片,图片上设置一个透明按钮 点击按钮时选定图片,这时想要改变按钮边框颜色表示被选中 我看了button的background属性和borderbrush属性,可是看不懂,求指点
请问为什么点击按钮背景颜色不变?急救啊、谢谢。
<html> <head> <meta http-equiv="Content-Type" content="text/html; charset=utf-8"/> </head> <body> var col=['blue','green','yellow','purple']; var index=0; function change(){ document.body.style.backgroundColor = col[index]; index++; If (index>=col.length){ index=0;} } <input type="button" onclick="change()" value="改变颜色"/> </body> </html>
iOS cell上的按钮问题,求大神帮忙
点击cell里的单个按钮,使背景颜色改变,再点击变回原来的颜色,两个颜色来回切换怎么做。
戳这个按钮不能改变颜色
<head> <meta charset="utf-8"> <title>test01</title> <!--这里是通过点击按钮来改变页面的样式。类似于换皮肤的原理--> <link id="mylink"” href="css/1.css" rel="stylesheet" type="text/css" /> <script type="text/javascript"> windows.onload = function(){ var mybut = document.getElementById("changecss"); var mylink = document.getElementById("mylink"); mybut.onclick = function(){ myink.href = "css/2.css"; } } </script> </head> <body> <input id="changecss" type="button" value="戳我更换样式表" /> </body>
C#跨线程修改背景颜色为什么不抛异常?
主线程启动Form1,在Form1里点按钮启动Form2: private void button2_Click(object sender, EventArgs e) { Thread newThread = new Thread(new ThreadStart(CreateForm)); newThread.Start(); } private void CreateForm() { f2 = new Form2(this); f2.ShowDialog(); } private Form2 f2; 这样,f2就成了Form1的子线程中的模式窗口。 在Form2中定义工具函数: public void Changeform2() { this.BackColor = Color.Green; //.Size = new Size(100,50); //this.Location = new Point(500,500); //this.Text = "Form1修改了我的颜色"; this.button1.BackColor = Color.BurlyWood; //this.button1.Text = "Form1修改了我的颜色"; } 在Form1里继续加: private void button6_Click(object sender, EventArgs e) { f2.Changeform2(); } 点击按钮6后,如果注释掉别的,仅仅保留修改背景颜色的那两行,执行成功,颜色改变,不会出错。 如果修改其他的属性:Text、Location、Size,就像希望的那样,抛异常:从不是创建控件的线程访问它。 我没有设置:Control.CheckForIllegalCrossThreadCalls = false;使用默认值true。
如何给一个按钮实现多个事件
## 按钮功能 **点击一个按钮后,按钮颜色改变,同时触发点击事件** ## 按钮 ``` <button type="button" class="colorchange" onclick="gr('.changeX','.changeY');">Windows</button> <button type="button" class="colorchange" onclick="gr('.changeY','.changeX');">macOS</button> ``` ## 点击事件的JS原生代码 ``` function gr(s1,s2){ var x = document.querySelectorAll(s1); var y = document.querySelectorAll(s2); var i; for (i = 0;i < x.length;i++){ x[i].style.display = 'block'; } for (i = 0;i < y.length;i++){ y[i].style.display = 'none'; } } ``` ## 按钮改变的JS原生代码 ``` var lis = document.getElementsByClassName("colorchange"); for (var i = 0; i < lis.length; i++) { lis[i].onclick = function(ind) { return function() { addClass(this, "active"); var sib = siblings(this); for (var j = 0; j < sib.length; j++) { removeClass(sib[j], "active"); } } }(i) } //样式函数 function addClass(obj, name) { obj.className = obj.className + " " + name; } //获取其他按钮 function siblings(obj) { var sibArr = obj.parentNode.children; var sibNewArr = []; for (var i = 0; i < sibArr.length; i++) { if (sibArr[i] != obj) { sibNewArr.push(sibArr[i]); } } return sibNewArr; } //删除样式函数 function removeClass(obj, name) { var classStr = obj.className; var classArr = classStr.split(" "); var classNewArr = []; for (var i = 0; i < classArr.length; i++) { if (classArr[i] != name) { classNewArr.push(classArr[i]); } } obj.className = classNewArr.join(" "); ```
闭包以及li标签快之间的空间处理问题
两个问题 第一个 下面这个闭包 对每个元素绑定对时候是绑定的i还是绑定的具体的数 具体一点说就是 绑定的是colors[0][i] 等我点击的时候i是多少就执行多少 还是说我绑定的时候 循环里当i=0时 我就绑定 colors[0][0] i=1时我就绑定colors[0][1] 这里不用let 用立即执行函数应该怎么写? ![图片说明](https://img-ask.csdn.net/upload/201805/04/1525416575_858718.png) 第二个 为什么 中间绿色选项快速点击的时候会出现文字选择的效果 我把div弄成一行就没有了 这里应该怎么处理? ![图片说明](https://img-ask.csdn.net/upload/201805/04/1525416807_49463.png) ``` <!doctype html> <html lang="en"> <head> <meta charset="UTF-8"> <title>原生js小demo集合</title> </head> <style> body{ background-color: lightgreen; } .container{ width: 500px; margin: 20px auto; } .control{ margin: 0 auto; } .control .button{ display: inline-block; width: 20px; height: 20px; margin-right: 5px; } .control .button.red{ background-color: red; } .control .button.red.checked{ background-color: white; box-shadow: 0 0 0 6px red inset; } .control .button.green{ background-color: green; } .control .button.green.checked{ background-color: white; box-shadow: 0 0 0 6px green inset; } .control .button.black{ background-color: black; } .control .button.black.checked{ background-color: white; box-shadow: 0 0 0 6px black inset; } ul{ margin-top: 5px; padding: 0; border:1px solid white; list-style-type: none; display: flex; background-color: green; } li{ height:30px; line-height: 30px; display: inline-block; flex: 1; border-right: 1px solid white; text-align: center; } li:last-child{ border-right: none; } li a{ text-decoration: none; color: white; } </style> <body> <div class="container"> <div class="control"> <div class="button red"></div> <div class="button green"></div> <div class="button black"></div> </div> <ul> <li><a href="javascript:;">新闻</a></li> <li><a href="javascript:;">娱乐</a></li> <li><a href="javascript:;">体育</a></li> <li><a href="javascript:;">电影</a></li> <li><a href="javascript:;">音乐</a></li> <li><a href="javascript:;">旅游</a></li> </ul> </div> <script> var colors = [['red','green','black'],['pink','lightgreen','lightslategrey']]; var buttons = document.getElementsByClassName("button"); buttons[1].classList.add('checked'); var ul = document.getElementsByTagName('ul')[0]; //对于每个button都要绑定一个事件,1.改变导航的背景色为button的颜色,2.改变body的背景色为button颜色的浅色 for(let i =0;i<buttons.length;i++){ buttons[i].addEventListener('click',function (e) { ul.style.backgroundColor=colors[0][i]; document.body.style.backgroundColor=colors[1][i]; //删除buttons的checked类,在点击元素上增加checked类 buttons[0].classList.remove('checked'); buttons[1].classList.remove('checked'); buttons[2].classList.remove('checked'); e.target.classList.add('checked'); }) } </script> </body> </html> ```
DOM7011: 此页上的代码禁用了反向和正向缓存,怎么解决?
为什么ie浏览器打开时某些js效果不出来,其他浏览器都正常,提示DOM7011: 此页上的代码禁用了反向和正向缓存,怎么回事儿? ``` <!DOCTYPE html> <html lang="en"> <head> <meta charset="UTF-8"> <title>Title</title> <style> #leftDiv{ width:185px; height:300px; border:1px solid lightgray; float: left; margin: 10px; } p{ margin: 0; padding: 0; } #middleDiv{ width: 40px; height:300px; float: left; padding-top: 20px; } button{ margin-top:20px; } #rightDiv{ width:185px; height: 300px; border:1px solid lightgray; float: left; margin:10px; } .selected{background-color: green;} </style> <script> window.onload=function() { var bigDiv=document.getElementById("bigDiv"); var leftDiv=document.getElementById("leftDiv"); var middleDiv=document.getElementById("middleDiv"); var rightDiv=document.getElementById("rightDiv"); var moveBtn=document.getElementById("moveBtn"); var moveAllBtn=document.getElementById("moveAllBtn"); var backBtn=document.getElementById("backBtn"); var backAllBtn=document.getElementById("backAllBtn"); var p=bigDiv.getElementsByTagName("p"); for(var i=0;i< p.length;i++) { var pElements=p.item(i); //鼠标移到列表,背景颜色改变,移去时消失 pElements.onmouseover=function(){ this.style.backgroundColor="lightgreen"; } pElements.onmouseout=function(){ this.style.backgroundColor=null; } //单击时选中,再次单击回到原来的状态 pElements.onclick=function(){ if(this.className=="selected") { this.className=null; }else{ this.className="selected"; } } //鼠标双击时列表被移到另一个div里面 pElements.ondblclick=function(){ if(this.parentNode.id=="leftDiv"){ rightDiv.appendChild(this); }else{ leftDiv.appendChild(this); } } } //给按钮添加效果 //点击向右移动按钮时,被选中的列表被移到右侧,并且选中状态消失 moveBtn.onclick=function(){ var p=leftDiv.getElementsByTagName("p");//因为是向右移动,所以要从左边的div里获取p元素 for(var i=0;i< p.length;i++){ var pElements= p.item(i); if(pElements.className=="selected") { rightDiv.appendChild(pElements); pElements.className=null; i--; } } } //点击向左移动按钮时,被选中的列表被移到左侧,并且选中状态消失 backBtn.onclick=function(){ var p=rightDiv.getElementsByTagName("p"); for(var i=0;i< p.length;i++){ var pElements= p.item(i); if(pElements.className=="selected") { leftDiv.appendChild(pElements); pElements.className=null; i--; } } } //点击全部右移按钮时,左侧所有的元素全部被移到右侧 moveAllBtn.onclick=function(){ var p=leftDiv.getElementsByTagName("p"); while(p.length>0){ var pElements= p.item(0); rightDiv.appendChild(pElements); pElements.className=null; } } //点击全部左移按钮时,右侧所有的元素全部被移到左侧 backAllBtn.onclick=function(){ var p=rightDiv.getElementsByTagName("p"); while(p.length>0){ var pElements= p.item(0); leftDiv.appendChild(pElements); pElements.className=null; } } } </script> </head> <body> <div id="bigDiv"> <div id="leftDiv"> <p>蛋蛋</p> <p>曹儿</p> <p>咸咸</p> <p>传小艳</p> </div> <div id="middleDiv"> <button id="moveBtn">&gt;&gt;</button> <button id="moveAllBtn">&gt;&gt;&gt;</button> <button id="backBtn">&lt;&lt;</button> <button id="backAllBtn">&lt;&lt;&lt;</button> </div> <div id="rightDiv"></div> </div> </body> </html> ```
Android 怎么将主程序添加到欢迎界面里面
我做好了一个欢迎界面,并且做了下按钮触发,里面什么都还没有,我这边有一个游戏主程序,应该怎么样才能合理的添加进去呢? 添加的结果就是 点击这个按钮 就进入这个主程序。下面是代码 这个是我的欢迎界面的代码 package sen.tan; import android.app.Activity; import android.graphics.Color; import android.os.Bundle; import android.util.DisplayMetrics; import android.view.KeyEvent; import android.view.MotionEvent; import android.view.View; import android.view.Window; import android.view.WindowManager; import android.widget.Button; import android.widget.ImageView; import android.widget.TextView; public class dazhuankuaiActivity extends Activity { BallView myview; public static int screenWidth ; public static int screenHeight; private TextView textview; Button kaishi,jieshu,guanyu; ImageView image; /** Called when the activity is first created. */ @Override public void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.main); String string = "欢迎进入疯狂打砖块游戏"; image = (ImageView) this.findViewById(R.id.image); image.setImageResource(R.drawable.img1); textview =(TextView) this.findViewById(R.id.textview); textview.setTextSize(20); textview.setTextColor(Color.GREEN); textview.setBackgroundColor(Color.RED); textview.setText(string); kaishi=(Button)findViewById(R.id.button1); guanyu=(Button)findViewById(R.id.button2); jieshu=(Button)findViewById(R.id.button3); kaishi.setWidth(250); guanyu.setWidth(200); jieshu.setWidth(150); kaishi.setTextSize(35); guanyu.setTextSize(29); jieshu.setTextSize(24); jieshu.setOnClickListener(new Button.OnClickListener(){ public void onClick(View v) { dazhuankuaiActivity.this.finish(); } }); guanyu.setOnClickListener(new Button.OnClickListener(){ public void onClick(View v){ textview.setText("本游戏由xxx制作,此游戏控制左右按键,来回移动挡板,不让小球掉落,当小球把上方砖块全部打完时,游戏胜利"); } }); kaishi.setOnClickListener(new Button.OnClickListener(){ public void onClick(View v) { } }); 下面是我找到的主程序 package ab.cc; import android.app.Activity; import android.os.Bundle; import android.util.DisplayMetrics; import android.view.KeyEvent; import android.view.MotionEvent; import android.view.Window; import android.view.WindowManager; public class BaomingActivity extends Activity { BallView myView; static int screenWidth; static int screenHeight; /** Called when the activity is first created. */ @Override public void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); /* 定义DisplayMetrics对象 */ DisplayMetrics dm = new DisplayMetrics(); /* 取得窗口属性 */ getWindowManager().getDefaultDisplay().getMetrics(dm); /* 窗口的宽度 */ screenWidth = dm.widthPixels; /* 窗口的高度 */ screenHeight = dm.heightPixels; // setTitle("宽"+screenWidth+" 高"+screenHeight); /* 设置为无标题栏 */ requestWindowFeature(Window.FEATURE_NO_TITLE); /* 设置为全屏模式 */ getWindow().setFlags(WindowManager.LayoutParams.FLAG_FULLSCREEN,WindowManager.LayoutParams.FLAG_FULLSCREEN); myView = new BallView(this); //设置显示GameSurfaceView视图 setContentView(myView); }//end of onCreate() //触笔事件 public boolean onTouchEvent(MotionEvent event) { return true; } //按键按下事件 public boolean onKeyDown(int keyCode, KeyEvent event) { switch (keyCode) { //菜单按键-设为初始菜单 case KeyEvent.KEYCODE_MENU: myView.resetGame(); //重新开始 break; //中间按键 case KeyEvent.KEYCODE_DPAD_CENTER: myView.ball_isRun = !myView.ball_isRun;//开始//暂停 break; //左方向键 case KeyEvent.KEYCODE_DPAD_LEFT: if(myView.ball_isRun){ if(myView.board_left<=myView.board_x_move) { myView.board_left=0; myView.board_right=myView.board_length; }else{ myView.board_left-=myView.board_x_move; myView.board_right-=myView.board_x_move;} } break; //右方向键 case KeyEvent.KEYCODE_DPAD_RIGHT: if(myView.ball_isRun){ if(screenWidth-myView.board_right<=myView.board_x_move ) { myView.board_left=screenWidth-myView.board_length; myView.board_right=screenWidth; }else{ myView.board_left+=myView.board_x_move; myView.board_right+=myView.board_x_move; } } break; //上方向键 case KeyEvent.KEYCODE_DPAD_UP: if(myView.ball_isRun){ if( myView.board_alterable_top==myView.board_default_top) { myView.board_alterable_top-=myView.boardYadd; myView.board_alterable_bottom-=myView.boardYadd; } } break; //下方向键 case KeyEvent.KEYCODE_DPAD_DOWN: if(myView.ball_isRun){ if( myView.board_alterable_top==myView.board_default_top-myView.boardYadd ) { myView.board_alterable_top=myView.board_default_top; myView.board_alterable_bottom=myView.board_alterable_top+myView.board_thickness; } } break; //返回键 case KeyEvent.KEYCODE_BACK: this.finish(); break; }//end switch return false; } //按键弹起事件 public boolean onKeyUp(int keyCode, KeyEvent event) { return true; } public boolean onKeyMultiple(int keyCode, int repeatCount, KeyEvent event) { return true; } } package ab.cc; import android.content.Context; import android.graphics.Canvas; import android.graphics.Color; import android.graphics.Paint; import android.graphics.RadialGradient; import android.graphics.Shader; import android.util.Log; import android.view.SurfaceHolder; import android.view.SurfaceView; public class BallView extends SurfaceView implements SurfaceHolder.Callback, Runnable { //线程延时控制 final int ball_sleep=1;//毫秒,延时越大,球速越慢 final int ball_r= 8;//小球半径 final float ball2_r= 8;//底下滚珠小球半径 final int ballXorYadd = 4;//小球的基本位移。测试可行值:2,4 //获取屏幕宽度和高度 int screen_width;//320; int screen_height;//480; //砖的属性 int brick_width;//每块砖宽 int brick_height;//每块砖高 boolean brick_exist[];//砖是否存在 int k ;// 列//到for循环里才初始化 int j ;// 行 int brick_left = brick_width*(k-1);//到判断语句才初始化 int brick_right = brick_width*k; int brick_top = brick_height*j; int brick_bottom = brick_height*(j+1); //挡板的属性 int board_length;//挡板长度:80比较合适,可以随意修改,但别超过screen_width final int boardYadd = 16;//按上下键时挡板y方向位移量。经验证4、8、16可以,12不行 final int board_x_move = 30;//挡板x方向位移量:可以随意自定义 int board_left;//挡板左侧(可变) int board_right;//挡板右侧(可变) int board_thickness;//挡板厚度 int board_default_top;//即435,挡板的top面初始位置 int board_alterable_top;//挡板上侧(可变) int board_alterable_bottom;//挡板下侧(可变) int ball_default_x;//球的初始x坐标 int ball_default_y;//球的初始y坐标 //球的即时坐标(可变): int ball_x;//球心横坐标 int ball_y;//球心纵坐标 //球的前一步的y坐标 int ball_previous_y; int ball_x_speed;//球的横向偏移量//可变 int ball_y_speed;//球的纵向偏移量//可变 boolean ball_isRun;//球是否在动 // 控制循环 boolean mbLoop; // 定义SurfaceHolder对象 SurfaceHolder mSurfaceHolder = null; //获得分数 int score; /* 唤醒渐变渲染 */ Shader mRadialGradient = null; //------------------------------------------------------------------------------------------------------// public BallView(Context context) { super(context); // 实例化SurfaceHolder mSurfaceHolder = this.getHolder(); // 添加回调 mSurfaceHolder.addCallback(this); this.setFocusable(true); //获取屏幕宽度和高度 screen_width = BaomingActivity.screenWidth;//320 screen_height = BaomingActivity.screenHeight;//480 //砖的属性 brick_width = screen_width/5;//每块砖宽64 brick_height = screen_height/15;//每块砖高32 //挡板的属性 board_length = screen_width/4;//挡板长度:80比较合适,可以随意修改,但别超过screen_width board_left = (screen_width-board_length)/2;//挡板左侧(可变) board_right = (screen_width+board_length)/2;//挡板右侧(可变) board_thickness = 5;//挡板厚度 board_default_top = 13*screen_height/15;//即435,挡板的top面初始位置 board_alterable_top = board_default_top;//挡板上侧(可变) board_alterable_bottom = board_alterable_top+board_thickness;//挡板下侧(可变) ball_default_x = screen_width/2;//球的初始x坐标 ball_default_y = board_default_top - ball_r;//球的初始y坐标 //球的即时坐标(可变): ball_x = ball_default_x; ball_y = ball_default_y; //球的前一步的y坐标 ball_previous_y = 0; ball_x_speed = ballXorYadd;//球的横向偏移量 ball_y_speed = ballXorYadd;//球的纵向偏移量 mbLoop = true; ball_isRun = false; score=0; brick_exist = new boolean[25]; for (int i = 0; i < 25; i++) { brick_exist[i] = true; } /* 构建RadialGradient对象,设置半径的属性 */ mRadialGradient = new RadialGradient(ball_x, ball_y, ball_r,//球中心坐标x,y,半径r new int[]{Color.WHITE,Color.BLUE,Color.GREEN,Color.RED,Color.YELLOW},//颜色数组 null,//颜色数组中每一种颜色对应的相对位置,为空的话就是平均分布,由中心向外排布 Shader.TileMode.REPEAT);//渲染模式:重复 } public void resetGame(){ ball_isRun = false; score =0;//分数 ball_x_speed = ballXorYadd;//球的横向偏移量 ball_y_speed = ballXorYadd;//球的纵向偏移量 ball_x = screen_width/2;//球心起始横坐标 ball_y = board_default_top - ball_r;//球心起始纵坐标 board_left = (screen_width-board_length)/2;//挡板左侧 board_right = (screen_width+board_length)/2;//挡板右侧 board_alterable_top = board_default_top;//挡板上侧 board_alterable_bottom = board_alterable_top+board_thickness;//挡板下侧 for (int i = 0; i < 25; i++) { brick_exist[i] = true; } } //---------------------------------绘图循环开始---------------------------------- public void run() { while (mbLoop&&!Thread.currentThread().isInterrupted()) { try { Thread.sleep(ball_sleep); } catch (InterruptedException e) { Thread.currentThread().interrupt(); } //球的前一步y坐标 ball_previous_y = ball_y; if (ball_isRun) { ballRunning();// 让小球移动 boardPositionCheck();//检测挡板是否处于“中线”位置,是就随小球上升一步,直至到“上线” hitWallCheck();//墙壁碰撞检测 hitBoardCheck();//挡板碰撞检测 hitBrickCheck();//砖块碰撞检测 } synchronized (mSurfaceHolder) { Draw(); } } } //---------------------------------绘图循环结束---------------------------------- //------------------------------------------------------------------------------ //让小球移动 public void ballRunning() { ball_x += ball_x_speed; ball_y -= ball_y_speed; } //朝左或朝右碰撞后小球水平方向逆向 public void ballLeftOrRightHit() { ball_x_speed *= -1; } //朝上或朝下碰撞后小球竖直方向逆向 public void ballUpOrDownHit() { ball_y_speed *= -1; } public void ballcornerHit() { ball_x_speed *= -1; ball_y_speed *= -1; } public void ballStraightUp() {//功能没实现,这是多余代码 ball_x_speed = 0;//注意在其他地方恢复 ball_y_speed *= -1; } //-------------------墙壁碰撞检测开始------------------------------------- public void hitWallCheck() { // 左碰墙 if (ball_x <= ball_r && ball_y >= ball_r && ball_y <= screen_height) { ballLeftOrRightHit(); // 右碰墙 } if (ball_x >= screen_width - ball_r && //不能写为 else if,因为可能恰好碰到角落。 ball_y >= ball_r && ball_y <= screen_height) { ballLeftOrRightHit(); } // 上碰墙 if (ball_x >= ball_r && ball_x <= screen_width - ball_r && ball_y <= ball_r + brick_height) //、、、、、、、、、、、、、、、25号修改 { ballUpOrDownHit(); } // 下碰墙 if (ball_x >= ball_r && ball_x <= screen_width - ball_r && ball_y >= screen_height-ball_r) { ballUpOrDownHit(); if(score<=10){ score = 0; } else score-=10; } } //-------------------墙壁碰撞检测结束------------------------------------- //-----------------------------挡板碰撞检测开始--------------------------- public void hitBoardCheck() { // 下碰挡板正面 if (ball_x >= ball_r && ball_x <= screen_width - ball_r && //在屏幕内,起码条件 ball_x >= board_left && ball_x <= board_right && //在挡板X域上方 ball_y == board_alterable_top - ball_r &&//球面与挡板相切 ball_previous_y <= board_alterable_top - ball_r //确定球是从上方下落 ) { if(board_alterable_top==board_default_top-boardYadd ){//如果弹簧伸张,挡板位于上线 ballHitBoardlower();//作用:ball_y_move减小;挡板被打下;小球Y向运动反向 } else if(board_alterable_top==board_default_top){//如果弹簧压缩,挡板位于下线 boardHitBallHigher();//作用:ball_y_move增加;挡板弹上;小球Y向运动反向 } } //斜碰挡板右上角//经验证有效 else if(Math.pow(board_right-ball_x, 2)+Math.pow(board_alterable_top-ball_y,2)<=Math.pow(ball_r, 2)&& ball_x>board_right && ball_y<board_alterable_top) { ballcornerHit(); } //斜碰挡板的左上角//经验证有效 else if(Math.pow(board_left-ball_x, 2)+Math.pow(board_alterable_top-ball_y,2)<=Math.pow(ball_r, 2)&& ball_x<board_left && ball_y<board_alterable_top) { ballcornerHit(); } } //-----------------------------挡板碰撞检测结束-------------------------- private void boardHitBallHigher() {//增强 ballUpOrDownHit();//小球Y方向反向,ball_y_speed变为正数 if(ball_y_speed == ballXorYadd ){ ball_y_speed += ballXorYadd;//离开挡板后小球Y方向速度增强 } if( boardYadd > ball_y_speed ){//在线程这一轮,小球上升多少,挡板就上升多少。 board_alterable_top = board_default_top - ball_y_speed; board_alterable_bottom= board_alterable_top+board_thickness;//挡板下层面 } } //检测挡板是否处于“中线”位置,是就随小球上升一步,直至到“上线” private void boardPositionCheck() {//还可直接利用球的位置刷新,board_top与球心相差ball_r if(board_alterable_top < board_default_top && board_alterable_top > board_default_top-boardYadd){ //挡板随球上升 if(board_alterable_top - ball_y_speed >= board_default_top-boardYadd){ board_alterable_top -= ball_y_speed;//挡板上层面 board_alterable_bottom= board_alterable_top+board_thickness;//挡板下层面 } else{ board_alterable_top = board_default_top-boardYadd;//挡板上层面 board_alterable_bottom= board_alterable_top+board_thickness;//挡板下层面 } } } private void ballHitBoardlower() {//减弱 board_alterable_top=board_default_top; board_alterable_bottom=board_default_top+board_thickness;//挡板被打退 ballUpOrDownHit();//小球Y方向反向 if(ball_y_speed==2*ballXorYadd){ ball_y_speed -= ballXorYadd;//小球Y方向速度减弱 } } //砖块碰撞检测开始----------------------------------------------------------- public void hitBrickCheck() { for (int i = 0; i <25 ; i++) { if (brick_exist[i]) { k = i % 5+1;// 1,2,3,4,5循环 j = i / 5+1;// 1,1,1,1,1;2,2,2,2,2,;...;5,5,5,5,5 brick_left = brick_width*(k-1); brick_right = brick_width*k; brick_top = brick_height*j; brick_bottom = brick_height*(j+1); //朝下碰砖的top面 AAAAAAAAAAAAAAAAAAAAA if(ball_x >= brick_left && ball_x <= brick_right && ball_y >= brick_top-ball_r && ball_y < brick_top) { ballUpOrDownHit(); brick_exist[i] = false; score+=4; //朝下正碰2砖中间,i砖右上角检测 if(k!=5 && ball_x == brick_right)//如果不是第5列砖的右侧边 { //如果砖[i+1]存在 if(brick_exist[i+1]){ brick_exist[i+1] = false; score+=4; } } //朝下正碰2砖中间,i砖左上角检测 else if(k!=1 && ball_x == brick_left)//如果不是第1列砖的左侧边 { //如果砖[i-1]存在 if(brick_exist[i-1]){ brick_exist[i-1] = false; score+=4; } } } //朝上碰砖的bottom面 BBBBBBBBBBBBBBBBB else if(ball_x >= brick_left && ball_x <= brick_right && ball_y > brick_bottom&& ball_y <= brick_bottom + ball_r ) { ballUpOrDownHit(); brick_exist[i] = false; score+=4; //朝上正碰2块砖中间--i砖的右下角检测 if(k!=5 && ball_x == brick_right) //如果不是第5列砖的右侧边 { if(brick_exist[i+1]){//如果砖[i+1]存在 brick_exist[i+1] = false; score+=4; } } //朝上正碰2块砖中间--i砖的左下角检测 else if(k!=1 && ball_x == brick_left) //如果不是第1列砖的左侧边 { if(brick_exist[i-1]){//如果砖[i-1]存在 brick_exist[i-1] = false; score+=4; } } } //朝右碰砖的left面CCCCCCCCCCCCCCCCC else if(ball_x >= brick_left -ball_r&&ball_x < brick_left&& ball_y >= brick_top && ball_y <= brick_bottom) { ballLeftOrRightHit(); brick_exist[i] = false; score+=4; //朝右正碰2块砖中间,左下角检测 if(j!=5 && ball_y == brick_bottom)//如果不是第5行砖的下侧边 { if(brick_exist[i+5]){//如果砖[i+5]存在 brick_exist[i+5] = false; score+=4; } } //朝右正碰2块砖中间,左上角检测 else if(j!=1 && ball_y == brick_top)//如果不是第1行砖的上侧边 { if(brick_exist[i-5]){//如果砖[i-5]存在 brick_exist[i-5] = false; score+=4; } } } //朝左碰砖的right面DDDDDDDDDDDDDDDDDD else if(ball_x >= brick_right && ball_x <= brick_right+ball_r&& ball_y >= brick_top && ball_y <= brick_bottom) { ballLeftOrRightHit(); brick_exist[i] = false; score+=4; //朝左正碰2块砖中间,右下角检测 if(j!=5 && ball_y == brick_bottom )//如果不是第5行砖的下侧边 { if(brick_exist[i+5]){//如果砖[i+5]存在 brick_exist[i+5] = false; score+=4; } } //朝左正碰2块砖中间,右上角检测 else if(j!=1 && ball_y == brick_top )//如果不是第1行砖上侧边 { if(brick_exist[i-5]){//如果砖[i-5]存在 brick_exist[i-5] = false; score+=4; } } } ///////////////////////////////////////// //斜碰i砖的左下角EEEEEEEEEEEEEEEEEEEEEEEE else if(( i-1<0||(i-1>=0&&!brick_exist[i-1]) ) && (i+5>=25||(i+5<25&&!brick_exist[i+5]) )&& Math.pow(brick_left-ball_x, 2)+Math.pow(brick_bottom-ball_y,2)<=Math.pow(ball_r, 2)&& ball_x>brick_left-ball_r && ball_x<brick_left && ball_y>brick_bottom && ball_y<brick_bottom+ball_r ) { ballcornerHit(); brick_exist[i] = false; score+=4; } //斜碰i砖的右下角FFFFFFFFFFFFFFFFFFFFFFFFFF else if( (i+1>=25||(i+1<25&&!brick_exist[i+1]) )&& (i+5>=25||(i+5<25&&!brick_exist[i+5]) )&& Math.pow(brick_right-ball_x, 2)+Math.pow(brick_bottom-ball_y,2)<=Math.pow(ball_r, 2)&& ball_x>brick_right&&ball_x<brick_right+ball_r&& ball_y>brick_bottom&&ball_y<brick_bottom+ball_r ) { Log.v("----------", "right bottom hit"+i+":"+brick_exist[i]); ballcornerHit(); brick_exist[i] = false; score+=4; } //斜碰i砖的右上角GGGGGGGGGGGGGGGGGGGGGGGG else if( (i+1>=25||(i+1<25&&!brick_exist[i+1]) )&& (i-5<0||(i-5>0&&!brick_exist[i-5]) )&& Math.pow(brick_right-ball_x, 2)+Math.pow(brick_top-ball_y,2)<=Math.pow(ball_r, 2)&& ball_x>brick_right && ball_x<brick_right+ball_r&& ball_y>brick_top-ball_r && ball_y<brick_top) { ballcornerHit(); brick_exist[i] = false; score+=4; } //斜碰i砖的左上角HHHHHHHHHHHHHHHHHHHHHHHHHH else if((i-1<0||(i-1>=0&&!brick_exist[i-1])) && (i-5<0||(i-5>=0&&!brick_exist[i-5])) && Math.pow(brick_left-ball_x, 2)+Math.pow(brick_top-ball_y,2)<=Math.pow(ball_r, 2)&& ball_x>brick_left-ball_x && ball_x<brick_left && ball_y>brick_top-ball_r && ball_y<brick_top ) { ballcornerHit(); brick_exist[i] = false; score+=4; } }//end if }//end for }//end hitBrickCheck() //砖块碰撞检测结束----------------------------------------------------------- //------------------------------------------ public boolean gameOver(){ int count = 0; for(boolean s:brick_exist){ if(!s){ count++; } } if(count == 25){ return true; }else{ return false; } } //------------------------------------------ //---------------绘图方法开始------------------------ public void Draw() { // 锁定画布,得到canvas Canvas canvas = mSurfaceHolder.lockCanvas(); if (mSurfaceHolder == null || canvas == null) { return; } // 绘图 Paint mPaint = new Paint(); // 设置取消锯齿效果 mPaint.setAntiAlias(true); mPaint.setColor(Color.GREEN); // 绘制矩形--背景 canvas.drawRect(0, 0, screen_width, brick_height-2, mPaint); mPaint.setColor(Color.MAGENTA); // 绘制矩形--背景 canvas.drawRect(0, brick_height-2, screen_width, screen_height, mPaint); mPaint.setColor(Color.RED);//设置字体颜色 mPaint.setTextSize(brick_height-7);//设置字体大小 canvas.drawText("得分:"+score, 0, brick_height-7, mPaint); // 绘制顶层挡板````````````````````````````````````````````````````````25号修改 mPaint.setColor(Color.BLACK);//设置颜色 mPaint.setStrokeWidth(4);//设置粗细 canvas.drawLine(0, brick_height-2, screen_width, brick_height-2, mPaint); for (int i = 0; i <25 ; i++) { if (brick_exist[i]) { k = i % 5+1;// 1,2,3,4,5循环 j = i / 5+1;// 1,1,1,1,1;2,2,2,2,2,;...;5,5,5,5,5 brick_left = brick_width*(k-1); brick_right = brick_width*k; brick_top = brick_height*j; brick_bottom = brick_height*(j+1); mPaint.setStyle(Paint.Style.FILL);// 设置实心画笔 mPaint.setColor(Color.BLACK); canvas.drawRect(brick_left+1, brick_top+1, brick_right-1,brick_bottom-1, mPaint); mPaint.setStyle(Paint.Style.STROKE);// 设置空心画笔 mPaint.setStrokeWidth(2);//设置粗细 mPaint.setColor(Color.RED); canvas.drawRect(brick_left+3, brick_top+3, brick_right-3,brick_bottom-3, mPaint); } } // 设置实心画笔 mPaint.setStyle(Paint.Style.FILL); { mPaint.setShader(mRadialGradient); canvas.drawCircle(ball_x, ball_y, ball_r, mPaint); } Paint mPaint2 = new Paint(); // 设置取消锯齿效果 mPaint2.setAntiAlias(true); // 设置实心画笔 mPaint2.setStyle(Paint.Style.FILL); { mPaint2.setColor(Color.BLACK); /* 绘制矩形挡板 */ canvas.drawRect(board_left, board_alterable_top, board_right, board_alterable_bottom,mPaint2); float board2_bottom = screen_height - 2*ball2_r;//164 float board2_top = board2_bottom - 4;//160 //线段端点坐标数组 float x0 = board_left+(board_right-board_left)/4; float y0 = board_alterable_bottom;//440或者444 float springAdd = (board2_top- board_alterable_bottom)/8;//即2.5或者2:弹簧小线段的y向长度 float springWidth = 5.0f;//弹簧小线段的x向长度 float x1 = x0 - springWidth; float y1 = y0 + springAdd; float x2 = x0 + springWidth; float y2 = y0 + 3*springAdd; float x3 = x1 ; float y3 = y0 + 5*springAdd; float x4 = x2; float y4 = y0 + 7*springAdd; float x5 = x0 ; float y5 = board2_top;//即460 float between_spring = (board_right-board_left)/2; float pts[] = { x0,y0,x1,y1, x1,y1,x2,y2, x2,y2,x3,y3, x3,y3,x4,y4, x4,y4,x5,y5}; float pts2[] = {x0+between_spring,y0, x1+between_spring,y1, x1+between_spring,y1, x2+between_spring,y2, x2+between_spring,y2, x3+between_spring,y3, x3+between_spring,y3, x4+between_spring,y4, x4+between_spring,y4, x5+between_spring,y5}; mPaint2.setStrokeWidth(2);//设置弹簧粗细 //绘制2个弹簧 canvas.drawLines(pts, mPaint2); canvas.drawLines(pts2, mPaint2); //绘制下层挡板 canvas.drawRect(board_left, board2_top, board_right, board2_bottom,mPaint2); mPaint2.setColor(Color.BLACK);// // 绘制最下面的两个“轮子”(圆心x,圆心y,半径r,p) canvas.drawCircle(board_left+ball2_r, screen_height-ball2_r, ball2_r, mPaint2);//圆 canvas.drawCircle(board_right-ball2_r, screen_height-ball2_r, ball2_r, mPaint2); mPaint2.setColor(Color.WHITE);// }//实心画笔mPaint2结束 if(gameOver()){ // mbLoop = false;//注释掉的话GAME OVER后也可重启 ball_isRun = false; mPaint2.setColor(Color.BLACK);//设置字体颜色 mPaint2.setTextSize(40.0f);//设置字体大小 canvas.drawText("GAME OVER", screen_width/32+40, screen_height/16*9-70, mPaint2); mPaint2.setTextSize(20.0f);//设置字体大小 canvas.drawText("Press \"MENU\" button to restart,", screen_width/32, //320/32=10 screen_height/16*9, //480/16=30,30*9=270 mPaint2); canvas.drawText("Press \"BACK\" button to exit.", screen_width/32, //320/32=10 screen_height/16*10, //480/16=30,30*10=300 mPaint2); } // 绘制后解锁,绘制后必须解锁才能显示 mSurfaceHolder.unlockCanvasAndPost(canvas); }// end of Draw() //---------------------绘图方法结束----------------------------------------------- // 在surface的大小发生改变时激发 public void surfaceChanged(SurfaceHolder holder, int format, int width, int height) { } // 在surface创建时激发 public void surfaceCreated(SurfaceHolder holder) { new Thread(this).start();// 开启绘图线程 } // 在surface销毁时激发 public void surfaceDestroyed(SurfaceHolder holder) { // 停止循环 mbLoop = false; } } 能否回答的详细一点,学的时间短,求帮忙
c#异步通讯五子棋 双方倒计时怎么写
我用c#异步通讯做了个五子棋的winform,服务器端和客户端分开的。想利用timer实现双方倒计时要怎么写? client端代码 ``` using System; using System.Drawing; using System.Windows.Forms; using System.IO; namespace GameClient { public partial class FormPlaying : Form { private int tableIndex; private int side; private DotColor[,] grid = new DotColor[15, 15]; //保存颜色,用于消点时进行判断 private Bitmap blackBitmap; private Bitmap whiteBitmap; //命令是否来自服务器 private bool isReceiveCommand = false; private Service service; delegate void LabelDelegate(Label label, string str); delegate void ButtonDelegate(Button button, bool flag); delegate void RadioButtonDelegate(RadioButton radioButton, bool flag); delegate void SetDotDelegate(int i, int j, int dotColor); LabelDelegate labelDelegate; ButtonDelegate buttonDelegate; RadioButtonDelegate radioButtonDelegate; public FormPlaying(int TableIndex, int Side, BinaryWriter bw) { InitializeComponent(); this.tableIndex = TableIndex; this.side = Side; labelDelegate = new LabelDelegate(SetLabel); buttonDelegate = new ButtonDelegate(SetButton); radioButtonDelegate = new RadioButtonDelegate(SetRadioButton); blackBitmap = new Bitmap(Properties.Resources.black); whiteBitmap = new Bitmap(Properties.Resources.white); service = new Service(listBox1, bw); } /// <summary>载入窗体时发生的事件</summary> private void FormPlaying_Load(object sender, EventArgs e) { //默认游戏级别为3级 radioButton3.Checked = true; for (int i = 0; i <= grid.GetUpperBound(0); i++) { for (int j = 0; j <= grid.GetUpperBound(1); j++) { grid[i, j] = DotColor.None; } } labelSide0.Text = ""; labelSide1.Text = ""; labelGrade0.Text = ""; labelGrade1.Text = ""; } /// <summary>设置标签显示信息</summary> /// <param name="Label">要设置的Label</param> /// <param name="string">要设置的信息</param> public void SetLabel(Label label, string str) { if (label.InvokeRequired) { this.Invoke(labelDelegate, label, str); } else { label.Text = str; } } /// <summary>设置button是否可用</summary> /// <param name="Button">要设置的Button</param> /// <param name="flag">是否可用</param> private void SetButton(Button button, bool flag) { if (button.InvokeRequired) { this.Invoke(buttonDelegate, button, flag); } else { button.Enabled = flag; } } /// <summary>设置radioButton选择状态</summary> /// <param name="radioButton">要设置的RadioButton</param> /// <param name="flag">是否选中</param> private void SetRadioButton(RadioButton radioButton, bool flag) { if (radioButton.InvokeRequired) { this.Invoke(radioButtonDelegate, radioButton, flag); } else { radioButton.Checked = flag; } } /// <summary>设置棋子状态</summary> /// <param name="i">第几行</param> /// <param name="j">第几列</param> /// <param name="dotColor">棋子颜色</param> //public void SetDot(int i, int j, DotColor dotColor) //{ // service.AddItemToListBox(string.Format("{0},{1},{2}", i, j, dotColor)); // grid[i, j] = dotColor; // pictureBox1.Invalidate(); //} /// <summary>重新开始新游戏</summary> /// <param name="str">警告信息</param> public void Restart(string str) { MessageBox.Show(str, "", MessageBoxButtons.OK, MessageBoxIcon.Warning); ResetGrid(); SetButton(buttonStart, true); } /// <summary>重置棋盘</summary> private void ResetGrid() { SetLabel(labelGrade0, ""); SetLabel(labelGrade1, ""); for (int i = 0; i <= grid.GetUpperBound(0); i++) { for (int j = 0; j <= grid.GetUpperBound(1); j++) { grid[i, j] = DotColor.None; } } pictureBox1.Invalidate(); } /// <summary>取消棋子</summary> /// <param name="x">x坐标</param> /// <param name="y">y坐标</param> public void UnsetDot(int x, int y,DotColor dotColor) { //service.AddItemToListBox(string.Format("{0},{1},{2}", i, j, dotColor)); //grid[x / 20 - 1, y / 20 - 1] = dotColor; grid[x,y] = dotColor; pictureBox1.Invalidate(); } /// <summary>绘制图像</summary> private void pictureBox1_Paint(object sender, PaintEventArgs e) { Graphics g = e.Graphics; for (int i = 0; i <= grid.GetUpperBound(0); i++) { for (int j = 0; j <= grid.GetUpperBound(1); j++) { if (grid[i, j] != DotColor.None) { if (grid[i, j] == DotColor.Black) { g.DrawImage(blackBitmap, (i + 1) * 20, (j + 1) * 20); } else { g.DrawImage(whiteBitmap, (i + 1) * 20, (j + 1) * 20); } } } } } /// <summary>设置游戏难度级别</summary> /// <param name="ss">难度级别</param> public void SetLevel(string ss) { isReceiveCommand = true; switch (ss) { case "1": SetRadioButton(radioButton1, true); break; case "2": SetRadioButton(radioButton2, true); break; case "3": SetRadioButton(radioButton3, true); break; case "4": SetRadioButton(radioButton4, true); break; case "5": SetRadioButton(radioButton5, true); break; } isReceiveCommand = false; } /// <summary>当游戏难度级别发生变化时触发的事件</summary> private void radioButton_CheckedChanged(object sender, EventArgs e) { //isReceiveCommand为true表明是接收服务器设置的难度级别触发的此事件 //就不需要再向服务器发送 if (isReceiveCommand == false) { RadioButton radiobutton = (RadioButton)sender; if (radiobutton.Checked == true) { //设置难度级别 //格式:Time,桌号,难度级别 service.SendToServer(string.Format("Level,{0},{1}",tableIndex, radiobutton.Name[radiobutton.Name.Length - 1])); } } } /// <summary>向服务器发送消息</summary> private void buttonSend_Click(object sender, EventArgs e) { //字符串格式:Talk,桌号,对话内容 service.SendToServer(string.Format("Talk,{0},{1}", tableIndex, textBox1.Text)); } /// <summary>对话内容改变时触发的事件</summary> private void textBox1_KeyPress(object sender, KeyPressEventArgs e) { if (e.KeyChar == (char)Keys.Enter) { //字符串格式:Talk,桌号,对话内容 service.SendToServer(string.Format("Talk,{0},{1}", tableIndex, textBox1.Text)); } } /// <summary>点击帮助按钮时触发的事件</summary> private void buttonHelp_Click(object sender, EventArgs e) { string str = "\n本游戏每两人为一组。游戏玩法:\n\n" + "(1)对局双方各执一色棋子。\n\n"+ "(2)空棋盘开局。\n\n" + "(3)黑先、白后,交替下子,每次只能下一子。\n\n" + "(4)只要黑白方中任意一方的棋子有五子连在一起(即五子连珠),可以为横连、纵连、斜连,则该方获胜。\n"; MessageBox.Show(str, "帮助信息"); } /// <summary>点击开始按钮时触发的事件</summary> private void buttonStart_Click(object sender, EventArgs e) { service.SendToServer(string.Format("Start,{0},{1}", tableIndex, side)); this.buttonStart.Enabled = false; } /// <summary>点击退出按钮时触发的事件</summary> private void buttonExit_Click(object sender, EventArgs e) { this.Close(); } /// <summary>关闭窗体时触发的事件</summary> private void FormPlaying_FormClosing(object sender, FormClosingEventArgs e) { //格式:GetUp,桌号,座位号 service.SendToServer(string.Format("GetUp,{0},{1}", tableIndex, side)); } /// <summary>FormRoom中的线程调用此方法关闭此窗体</summary> public void StopFormPlaying() { Application.Exit(); } /// <summary>在pictureBox1中按下鼠标触发的事件</summary> private void pictureBox1_MouseDown(object sender, MouseEventArgs e) { int x = e.X / 20; int y = e.Y / 20; int color=-1; if (!(x < 1 || x > 15 || y < 1 || y > 15)) { if (grid[x - 1, y - 1] == DotColor.None) { // int color = (int)grid[x - 1, y - 1]; if (side == 0) { color = 0; } if (side == 1) { color = 1; } //发送格式:UnsetDot,桌号,座位号,行,列,颜色 service.SendToServer(string.Format( "UnsetDot,{0},{1},{2},{3},{4}", tableIndex, side, x - 1, y - 1, color)); } } } /// <summary> /// 设置玩家信息,格式:座位号,labelSide显示的信息,listbox显示的信息 /// </summary> /// <param name="sideString">指定玩家</param> /// <param name="labelSideString">labelSide显示的信息</param> /// <param name="listBoxString">listbox显示的信息</param> public void SetTableSideText(string sideString, string labelSideString, string listBoxString) { string s = "白方"; if (sideString == "0") { s = "黑方:"; } //判断自己是黑方还是白方 if (sideString == side.ToString()) { SetLabel(labelSide1, s + labelSideString); } else { SetLabel(labelSide0, s + labelSideString); } service.AddItemToListBox(listBoxString); } /// <summary> /// 设置成绩信息,格式:grade0为黑方成绩,grade1为白方成绩 /// </summary> /// <param name="str0">黑方成绩信息</param> /// <param name="str1">白方成绩信息</param> public void SetGradeText(string str0, string str1) { if (side == (int)DotColor.Black) { SetLabel(labelGrade1, str0); SetLabel(labelGrade0, str1); } else { SetLabel(labelGrade0, str0); SetLabel(labelGrade1, str1); } } /// <summary>显示谈话信息</summary> /// <param name="talkMan">谈话者</param> /// <param name="str">要显示的信息</param> public void ShowTalk(string talkMan, string str) { service.AddItemToListBox(string.Format("{0}说:{1}", talkMan, str)); } /// <summary> /// 显示消息 /// </summary> /// <param name="str">要显示的消息</param> public void ShowMessage(string str) { service.AddItemToListBox(str); } } } ``` service方法代码 ``` //------Service.cs----------// using System.Windows.Forms; using System.IO; using System.Net; using System.Net.Sockets; using System; using System.Threading; namespace GameClient { class Service { ListBox listbox; //StreamWriter sw; BinaryWriter bw; bool isExit = false; public Service(ListBox listbox, BinaryWriter bw) { this.listbox = listbox; this.bw = bw; } private struct SendToServerStates { public SendToServerDelegate d; public IAsyncResult result; } /// <summary>异步向服务器端发送数据</summary> public void AsyncSendToServer(string message) { SendToServerDelegate d = new SendToServerDelegate(SendToServer); IAsyncResult result = d.BeginInvoke(message, null, null); while (result.IsCompleted == false) { if (isExit) { return; } Thread.Sleep(50); } SendToServerStates states = new SendToServerStates(); states.d = d; states.result = result; Thread t = new Thread(FinishAsyncSendToServer); t.IsBackground = true; t.Start(states); } /// <summary>处理接收的服务器端数据</summary> private void FinishAsyncSendToServer(object obj) { SendToServerStates states = (SendToServerStates)obj; states.d.EndInvoke(states.result); } delegate void SendToServerDelegate(string message); /// <summary>向服务器发送数据</summary> public void SendToServer(string str) { try { bw.Write(str); bw.Flush(); } catch { AddItemToListBox("发送数据失败"); } } delegate void ListBoxDelegate(string str); /// <summary>在listbox中追加信息<</summary> /// <param name="str">要追加的信息</param> public void AddItemToListBox(string str) { if (listbox.InvokeRequired) { ListBoxDelegate d = AddItemToListBox; listbox.Invoke(d, str); } else { listbox.Items.Add(str); listbox.SelectedIndex = listbox.Items.Count - 1; listbox.ClearSelected(); } } } } ```
void SetStation() 函数功能实现
实现 void SetStation(char* station, bool bOpenDoor,StopStationState StationState, bool bShowStopStationPage) 实现二三四三个参数的功能,,第二个参数要求实现能够控制图形界面开关门,第三个是实现三个站点状态正确显示(不抱期望),第四个是图形界面两个页面之间的切换, 第一个参数要求实现图中站点信息显示控制,比如当前站显示为红色,上一站和下一站都是黑色,更上一站显示为灰色。 如果能全部实现这些功能,C币还可以追加。 下面是我自己写的代码,但是功能没有实现。 #pragma once #include <UIlib.h> #include <string.h> #include <stdafx.h> #include <iostream> using namespace DuiLib; #ifdef _DEBUG # ifdef _UNICODE # pragma comment(lib, "DuiLib_ud.lib") # else # pragma comment(lib, "DuiLib_d.lib") # endif #else # ifdef _UNICODE # pragma comment(lib, "DuiLib_u.lib") # else # pragma comment(lib, "DuiLib.lib") # endif #endif struct station{ char StationName[13]; char* pOption; char* pLabel; }; enum StopStationState { NotArrive,// 未到站 STOPED,// 已到站 WillArrive,// 将到站 }; class CDuiFrameWnd : public WindowImplBase { public: virtual LPCTSTR GetWindowClassName() const { return _T("DUIMainFrame"); } virtual CDuiString GetSkinFile() { return _T("Qtitle.xml"); } virtual CDuiString GetSkinFolder() { return _T(""); } //duilib窗口的初始化函数 void InitWindow() { // SendMessage(WM_SYSCOMMAND, SC_MAXIMIZE, 0); //窗口的最大化 //struct station cStation = {"佛主岭","Fontc1","surebtn"} ,cStation1,cStation2,cStation3,cStation4,cStation5,cStation6; struct station cStation[13] = {{"佛主岭","Fontc1","surebtn"},{"高新五路","Fontc2","surebtn"},{"高新四路","Fontc3","surebtn"},{"流芳园大街","Fontc4","surebtn"}, {"工程大学","Fontc5","surebtn"},{"光谷大道","Fontc6","surebtn"}}; //strcpy(cStation.StationName,"佛主岭"); /* CButtonUI* p_surebtn = static_cast<CButtonUI*>(m_pm.FindControl(_T("surebtn"))); //这里获取到的指针可能是空的,可以断点看看 CComboUI* pAccountCombo = static_cast<CComboUI*>(m_pm.FindControl(_T("StationMess"))); CEditUI* pAccountEdit = static_cast<CEditUI*>(m_pm.FindControl(_T("accountedit"))); //指针判断,如果指针为空,直接操作会崩溃?所以都需要判断下,程序健壮性 if(pAccountCombo && pAccountEdit)pAccountEdit->SetText(pAccountCombo->GetText()); pAccountEdit->SetFocus(); */ SetStation("佛主岭",false,STOPED,true); } void SetStation(char* station, bool bOpenDoor,StopStationState StationState, bool bShowStopStationPage) { //btnopenDoor.Selected(); COptionUI* m_Opendoor = static_cast<COptionUI*>(m_PaintManager.FindControl(_T("OpenDoor"))); COptionUI* m_ShowPage = static_cast<COptionUI*>(m_PaintManager.FindControl(_T("Gloa2"))); m_Opendoor->Selected(true); m_ShowPage->Selected(false); } /* void OnPrepare(){ CComboUI* pStationCombo = static_cast<CComboUI*>(m_pm.FindControl(_T("StationMess"))); }*/ virtual void Notify(TNotifyUI& msg) { if(msg.sType == _T("click")) { if(msg.pSender->GetName() == _T("p_surebtn")) { COptionUI* pControl = static_cast<COptionUI*>(m_PaintManager.FindControl(_T("StationChoice"))); } } else if(msg.sType == _T("itemselect")) { if(msg.pSender->GetName() == _T("StationMess")) { //代码有问题,m_pm未初始化??? // CComboUI* pAccountCombo = static_cast<CComboUI*>(m_pm.FindControl(_T("StationMess"))); // pAccountCombo->GetText(); } } } private: CButtonUI* p_surebtn; }; int APIENTRY _tWinMain(HINSTANCE hInstance, HINSTANCE hPrevInstance, LPTSTR lpCmdLine, int nCmdShow) { CPaintManagerUI::SetInstance(hInstance); CDuiFrameWnd duiFrame; duiFrame.Create(NULL, _T("DUIWnd"), WS_VISIBLE | WS_POPUP, WS_EX_WINDOWEDGE); //duiFrame.SetStation("佛主岭", false, STOPED,false); duiFrame.CenterWindow(); duiFrame.ShowModal(); return 0; } 附上一个xml内容: <?xml version="1.0" encoding="utf-8" ?> <Window size="1920,500" caption="0,0,0,81"> <Font id = "0" name="字体索引0" size="15" bold="false" italic="false" /> <Font id = "1" name="黑体" size="26" bold="false" italic="false" /> <Font id = "2" name="黑体" size="18" bold="false" italic="false" /> <Font id = "3" name="字体索引3" size="12" bold="false" italic="false" /> <Font id = "4" name="字体索引4" size="10" bold="false" italic="false" /> <VerticalLayout bkcolor="#FFFFFFFF" bkcolor2="#FFF0F0F0"> <!--标题栏区图片切换--> <HorizontalLayout height="84"> <TabLayout name="" float="true" pos="0,0,0,0" width="1628" height="81"> <ChildLayout xmlfile="Tarm1.xml" /> </TabLayout> <TabLayout name="" float="true" pos="1628,0,0,0" width="292" height="81"> <ChildLayout xmlfile="OVOpen.xml"/> </TabLayout> <!--Tab点击--> <!--标题栏开关门--> <TabLayout name="tabTest" float="true" pos="1628,0,0,0" width="292" height="81"> <ChildLayout xmlfile="OVOpen.xml" /> <ChildLayout xmlfile="NotOpen.xml" /> </TabLayout> <!--标题栏 到站信息--> <TabLayout name="tabTest2" float="true" pos="0,0,0,0" width="1628" height="81"> <ChildLayout xmlfile="Tarmt.xml" /> <ChildLayout xmlfile="Tarm1.xml" /> </TabLayout> </HorizontalLayout > <!--客户区代码--> <HorizontalLayout height="320"> <!--站点图标改变颜色--> <TabLayout name="Mid" float="true" pos="0,0,0,0" width="1920" height="325"> <ChildLayout xmlfile="Mid.xml" /> </TabLayout> <!--客户区开关门图片--> <HorizontalLayout> <HorizontalLayout> <TabLayout name="tabTest1" float="true" pos="0,0,0,0" width="1920" height="325"> <ChildLayout xmlfile="SiteMessage2.xml" /> <ChildLayout xmlfile="SiteMessage.xml" /> </TabLayout> </HorizontalLayout> <!--中间图片切换--> <TabLayout name="tabTest3" float="true" pos="0,0,0,0" width="1920" height="325"> <ChildLayout xmlfile="Mid.xml" /> <ChildLayout xmlfile="SiteMessage1.xml" /> </TabLayout> </HorizontalLayout> </HorizontalLayout> <!--下方点击按钮栏--> <HorizontalLayout > <Option name="Gloa1" text="即将到达" float="true" pos="1180,10,0,0" width="60" height="24" bkimage="ggu\a9_1.png" group="tabDemo" selected="true" /> <Option name="Gloa2" text="已到达" float="true" pos="1180,40,0,0" width="60" height="24" bkimage="ggu\a9.png" group="tabDemo" selected="true" /> <Option name="OpenDoor" text="开门" float="true" pos="1340,10,0,0" width="44" height="24" bkimage="ggu\a9_1.png" group="tabDemo" selected="true" /> <Option name="NotOpen" text="不开门" float="true" pos="1340,40,0,0" width="44" height="24" bkimage="ggu\a9.png" group="tabDemo" /> <Option name="NextStation" text="下一站" float="true" pos="1280,10,0,0" width="44" height="24" bkimage="ggu\a13_1_1.png" group="tabDemo" selected="true" /> <Option name="PrevStation" text="上一站" float="true" pos="1280,40,0,0" width="44" height="24" bkimage="ggu\a13_1.png" group="tabDemo" /> <Option name="NextStation1" text="Next" float="true" pos="50,10,0,0" width="44" height="24" bkimage="ggu\a13_1_1.png" group="tabDemo" selected="true" /> <Option name="PrevStation1" text="Prev" float="true" pos="50,40,0,0" width="44" height="24" bkimage="ggu\a13_1.png" group="tabDemo" /> <Option name="NextStation2" text="Next" float="true" pos="100,10,0,0" width="44" height="24" bkimage="ggu\a13_1_1.png" group="tabDemo" selected="true" /> <Option name="PrevStation2" text="Prev" float="true" pos="100,40,0,0" width="44" height="24" bkimage="ggu\a13_1.png" group="tabDemo" /> <Combo name="StationMess" float="true" enabled="true" pos="1400,40,0,0" width="80" height="30" normalimage="file='ggu\pic14.jpg'" hotimage="file='ComboBox/Combo_over.bmp' " pushedimage="file='ComboBox/Combo_over.bmp' "> <ListLabelElement text="佛主岭" selected ="true" /> <ListLabelElement text="高新五路" /> <ListLabelElement text="高新四路" /> <ListLabelElement text="流芳园横街" /> <ListLabelElement text="工程大学" /> <ListLabelElement text="光谷大道" /> <ListLabelElement text="当代国际花园" /> </Combo> <Button name ="surebtn" text="确定" float ="true" pos ="1500,40,0,0" width ="60" height ="30" bkcolor ="#FF00FF00" hotbkcolor ="#FFF0FFF0"/> </HorizontalLayout> </VerticalLayout> </Window> 期待各位大佬的答案,谢谢谢谢
相见恨晚的超实用网站
相见恨晚的超实用网站 持续更新中。。。
Java学习的正确打开方式
在博主认为,对于入门级学习java的最佳学习方法莫过于视频+博客+书籍+总结,前三者博主将淋漓尽致地挥毫于这篇博客文章中,至于总结在于个人,实际上越到后面你会发现学习的最好方式就是阅读参考官方文档其次就是国内的书籍,博客次之,这又是一个层次了,这里暂时不提后面再谈。博主将为各位入门java保驾护航,各位只管冲鸭!!!上天是公平的,只要不辜负时间,时间自然不会辜负你。 何谓学习?博主所理解的学习,它是一个过程,是一个不断累积、不断沉淀、不断总结、善于传达自己的个人见解以及乐于分享的过程。
程序员必须掌握的核心算法有哪些?
由于我之前一直强调数据结构以及算法学习的重要性,所以就有一些读者经常问我,数据结构与算法应该要学习到哪个程度呢?,说实话,这个问题我不知道要怎么回答你,主要取决于你想学习到哪些程度,不过针对这个问题,我稍微总结一下我学过的算法知识点,以及我觉得值得学习的算法。这些算法与数据结构的学习大多数是零散的,并没有一本把他们全部覆盖的书籍。下面是我觉得值得学习的一些算法以及数据结构,当然,我也会整理一些看过...
大学四年自学走来,这些私藏的实用工具/学习网站我贡献出来了
大学四年,看课本是不可能一直看课本的了,对于学习,特别是自学,善于搜索网上的一些资源来辅助,还是非常有必要的,下面我就把这几年私藏的各种资源,网站贡献出来给你们。主要有:电子书搜索、实用工具、在线视频学习网站、非视频学习网站、软件下载、面试/求职必备网站。 注意:文中提到的所有资源,文末我都给你整理好了,你们只管拿去,如果觉得不错,转发、分享就是最大的支持了。 一、电子书搜索 对于大部分程序员...
linux系列之常用运维命令整理笔录
本博客记录工作中需要的linux运维命令,大学时候开始接触linux,会一些基本操作,可是都没有整理起来,加上是做开发,不做运维,有些命令忘记了,所以现在整理成博客,当然vi,文件操作等就不介绍了,慢慢积累一些其它拓展的命令,博客不定时更新 free -m 其中:m表示兆,也可以用g,注意都要小写 Men:表示物理内存统计 total:表示物理内存总数(total=used+free) use...
比特币原理详解
一、什么是比特币 比特币是一种电子货币,是一种基于密码学的货币,在2008年11月1日由中本聪发表比特币白皮书,文中提出了一种去中心化的电子记账系统,我们平时的电子现金是银行来记账,因为银行的背后是国家信用。去中心化电子记账系统是参与者共同记账。比特币可以防止主权危机、信用风险。其好处不多做赘述,这一层面介绍的文章很多,本文主要从更深层的技术原理角度进行介绍。 二、问题引入 假设现有4个人...
python 简易微信实现(注册登录+数据库存储+聊天+GUI+文件传输)
socket+tkinter详解+简易微信实现 历经多天的努力,查阅了许多大佬的博客后终于实现了一个简易的微信O(∩_∩)O~~ 简易数据库的实现 使用pands+CSV实现数据库框架搭建 import socket import threading from pandas import * import pymysql import csv # 创建DataFrame对象 # 存储用户数据的表(...
程序员接私活怎样防止做完了不给钱?
首先跟大家说明一点,我们做 IT 类的外包开发,是非标品开发,所以很有可能在开发过程中会有这样那样的需求修改,而这种需求修改很容易造成扯皮,进而影响到费用支付,甚至出现做完了项目收不到钱的情况。 那么,怎么保证自己的薪酬安全呢? 我们在开工前,一定要做好一些证据方面的准备(也就是“讨薪”的理论依据),这其中最重要的就是需求文档和验收标准。一定要让需求方提供这两个文档资料作为开发的基础。之后开发...
网页实现一个简单的音乐播放器(大佬别看。(⊙﹏⊙))
今天闲着无事,就想写点东西。然后听了下歌,就打算写个播放器。 于是乎用h5 audio的加上js简单的播放器完工了。 演示地点演示 html代码如下` music 这个年纪 七月的风 音乐 ` 然后就是css`*{ margin: 0; padding: 0; text-decoration: none; list-...
Python十大装B语法
Python 是一种代表简单思想的语言,其语法相对简单,很容易上手。不过,如果就此小视 Python 语法的精妙和深邃,那就大错特错了。本文精心筛选了最能展现 Python 语法之精妙的十个知识点,并附上详细的实例代码。如能在实战中融会贯通、灵活使用,必将使代码更为精炼、高效,同时也会极大提升代码B格,使之看上去更老练,读起来更优雅。
数据库优化 - SQL优化
以实际SQL入手,带你一步一步走上SQL优化之路!
2019年11月中国大陆编程语言排行榜
2019年11月2日,我统计了某招聘网站,获得有效程序员招聘数据9万条。针对招聘信息,提取编程语言关键字,并统计如下: 编程语言比例 rank pl_ percentage 1 java 33.62% 2 cpp 16.42% 3 c_sharp 12.82% 4 javascript 12.31% 5 python 7.93% 6 go 7.25% 7 p...
通俗易懂地给女朋友讲:线程池的内部原理
餐盘在灯光的照耀下格外晶莹洁白,女朋友拿起红酒杯轻轻地抿了一小口,对我说:“经常听你说线程池,到底线程池到底是个什么原理?”
《奇巧淫技》系列-python!!每天早上八点自动发送天气预报邮件到QQ邮箱
将代码部署服务器,每日早上定时获取到天气数据,并发送到邮箱。 也可以说是一个小型人工智障。 知识可以运用在不同地方,不一定非是天气预报。
经典算法(5)杨辉三角
杨辉三角 是经典算法,这篇博客对它的算法思想进行了讲解,并有完整的代码实现。
腾讯算法面试题:64匹马8个跑道需要多少轮才能选出最快的四匹?
昨天,有网友私信我,说去阿里面试,彻底的被打击到了。问了为什么网上大量使用ThreadLocal的源码都会加上private static?他被难住了,因为他从来都没有考虑过这个问题。无独有偶,今天笔者又发现有网友吐槽了一道腾讯的面试题,我们一起来看看。 腾讯算法面试题:64匹马8个跑道需要多少轮才能选出最快的四匹? 在互联网职场论坛,一名程序员发帖求助到。二面腾讯,其中一个算法题:64匹...
面试官:你连RESTful都不知道我怎么敢要你?
干货,2019 RESTful最贱实践
刷了几千道算法题,这些我私藏的刷题网站都在这里了!
遥想当年,机缘巧合入了 ACM 的坑,周边巨擘林立,从此过上了"天天被虐似死狗"的生活… 然而我是谁,我可是死狗中的战斗鸡,智力不够那刷题来凑,开始了夜以继日哼哧哼哧刷题的日子,从此"读题与提交齐飞, AC 与 WA 一色 ",我惊喜的发现被题虐既刺激又有快感,那一刻我泪流满面。这么好的事儿作为一个正直的人绝不能自己独享,经过激烈的颅内斗争,我决定把我私藏的十几个 T 的,阿不,十几个刷题网...
JavaScript 为什么能活到现在?
作者 | 司徒正美 责编 |郭芮 出品 | CSDN(ID:CSDNnews) JavaScript能发展到现在的程度已经经历不少的坎坷,早产带来的某些缺陷是永久性的,因此浏览器才有禁用JavaScript的选项。甚至在jQuery时代有人问出这样的问题,jQuery与JavaScript哪个快?在Babel.js出来之前,发明一门全新的语言代码代替JavaScript...
项目中的if else太多了,该怎么重构?
介绍 最近跟着公司的大佬开发了一款IM系统,类似QQ和微信哈,就是聊天软件。我们有一部分业务逻辑是这样的 if (msgType = "文本") { // dosomething } else if(msgType = "图片") { // doshomething } else if(msgType = "视频") { // doshomething } else { // doshom...
Nginx 原理和架构
Nginx 是一个免费的,开源的,高性能的 HTTP 服务器和反向代理,以及 IMAP / POP3 代理服务器。Nginx 以其高性能,稳定性,丰富的功能,简单的配置和低资源消耗而闻名。 Nginx 的整体架构 Nginx 里有一个 master 进程和多个 worker 进程。master 进程并不处理网络请求,主要负责调度工作进程:加载配置、启动工作进程及非停升级。worker 进程负责处...
致 Python 初学者
欢迎来到“Python进阶”专栏!来到这里的每一位同学,应该大致上学习了很多 Python 的基础知识,正在努力成长的过程中。在此期间,一定遇到了很多的困惑,对未来的学习方向感到迷茫。我非常理解你们所面临的处境。我从2007年开始接触 python 这门编程语言,从2009年开始单一使用 python 应对所有的开发工作,直至今天。回顾自己的学习过程,也曾经遇到过无数的困难,也曾经迷茫过、困惑过。开办这个专栏,正是为了帮助像我当年一样困惑的 Python 初学者走出困境、快速成长。希望我的经验能真正帮到你
Python 编程开发 实用经验和技巧
Python是一门很灵活的语言,也有很多实用的方法,有时候实现一个功能可以用多种方法实现,我这里总结了一些常用的方法和技巧,包括小数保留指定位小数、判断变量的数据类型、类方法@classmethod、制表符中文对齐、遍历字典、datetime.timedelta的使用等,会持续更新......
吐血推荐珍藏的Visual Studio Code插件
作为一名Java工程师,由于工作需要,最近一个月一直在写NodeJS,这种经历可以说是一部辛酸史了。好在有神器Visual Studio Code陪伴,让我的这段经历没有更加困难。眼看这段经历要告一段落了,今天就来给大家分享一下我常用的一些VSC的插件。 VSC的插件安装方法很简单,只需要点击左侧最下方的插件栏选项,然后就可以搜索你想要的插件了。 下面我们进入正题 Material Theme ...
“狗屁不通文章生成器”登顶GitHub热榜,分分钟写出万字形式主义大作
一、垃圾文字生成器介绍 最近在浏览GitHub的时候,发现了这样一个骨骼清奇的雷人项目,而且热度还特别高。 项目中文名:狗屁不通文章生成器 项目英文名:BullshitGenerator 根据作者的介绍,他是偶尔需要一些中文文字用于GUI开发时测试文本渲染,因此开发了这个废话生成器。但由于生成的废话实在是太过富于哲理,所以最近已经被小伙伴们给玩坏了。 他的文风可能是这样的: 你发现,...
程序员:我终于知道post和get的区别
是一个老生常谈的话题,然而随着不断的学习,对于以前的认识有很多误区,所以还是需要不断地总结的,学而时习之,不亦说乎
《程序人生》系列-这个程序员只用了20行代码就拿了冠军
你知道的越多,你不知道的越多 点赞再看,养成习惯GitHub上已经开源https://github.com/JavaFamily,有一线大厂面试点脑图,欢迎Star和完善 前言 这一期不算《吊打面试官》系列的,所有没前言我直接开始。 絮叨 本来应该是没有这期的,看过我上期的小伙伴应该是知道的嘛,双十一比较忙嘛,要值班又要去帮忙拍摄年会的视频素材,还得搞个程序员一天的Vlog,还要写BU...
开源并不是你认为的那些事
点击上方蓝字 关注我们开源之道导读所以 ————想要理清开源是什么?先要厘清开源不是什么,名正言顺是句中国的古代成语,概念本身的理解非常之重要。大部分生物多样性的起源,...
加快推动区块链技术和产业创新发展,2019可信区块链峰会在京召开
11月8日,由中国信息通信研究院、中国通信标准化协会、中国互联网协会、可信区块链推进计划联合主办,科技行者协办的2019可信区块链峰会将在北京悠唐皇冠假日酒店开幕。   区块链技术被认为是继蒸汽机、电力、互联网之后,下一代颠覆性的核心技术。如果说蒸汽机释放了人类的生产力,电力解决了人类基本的生活需求,互联网彻底改变了信息传递的方式,区块链作为构造信任的技术有重要的价值。   1...
Python 植物大战僵尸代码实现(2):植物卡片选择和种植
这篇文章要介绍的是: - 上方植物卡片栏的实现。 - 点击植物卡片,鼠标切换为植物图片。 - 鼠标移动时,判断当前在哪个方格中,并显示半透明的植物作为提示。
程序员把地府后台管理系统做出来了,还有3.0版本!12月7号最新消息:已在开发中有github地址
第一幕:缘起 听说阎王爷要做个生死簿后台管理系统,我们派去了一个程序员…… 996程序员做的梦: 第一场:团队招募 为了应对地府管理危机,阎王打算找“人”开发一套地府后台管理系统,于是就在地府总经办群中发了项目需求。 话说还是中国电信的信号好,地府都是满格,哈哈!!! 经常会有外行朋友问:看某网站做的不错,功能也简单,你帮忙做一下? 而这次,面对这样的需求,这个程序员...
网易云6亿用户音乐推荐算法
网易云音乐是音乐爱好者的集聚地,云音乐推荐系统致力于通过 AI 算法的落地,实现用户千人千面的个性化推荐,为用户带来不一样的听歌体验。 本次分享重点介绍 AI 算法在音乐推荐中的应用实践,以及在算法落地过程中遇到的挑战和解决方案。 将从如下两个部分展开: AI算法在音乐推荐中的应用 音乐场景下的 AI 思考 从 2013 年 4 月正式上线至今,网易云音乐平台持续提供着:乐屏社区、UGC...
shell脚本基础
shell简介:shell是一种脚本语言,可以使用逻辑判断、循环等语法,可以自定义函数,是系统命令的集合 文章目录shell脚本结构和执行方法shell脚本中date命令的用法 shell脚本结构和执行方法 1.shell脚本开头需要加#!/bin/bash 2.以#开头的行作为注释 3.脚本的名字以.sh结尾,用于区分这是一个shell脚本 4.执行方法有两种: 1)bash test.sh 2...
8年经验面试官详解 Java 面试秘诀
作者 |胡书敏 责编 | 刘静 出品 | CSDN(ID:CSDNnews) 本人目前在一家知名外企担任架构师,而且最近八年来,在多家外企和互联网公司担任Java技术面试官,前后累计面试了有两三百位候选人。在本文里,就将结合本人的面试经验,针对Java初学者、Java初级开发和Java开发,给出若干准备简历和准备面试的建议。 Java程序员准备和投递简历的实...
面试官如何考察你的思维方式?
1.两种思维方式在求职面试中,经常会考察这种问题:北京有多少量特斯拉汽车?某胡同口的煎饼摊一年能卖出多少个煎饼?深圳有多少个产品经理?一辆公交车里能装下多少个乒乓球?一个正常成年人有多少根头发?这类估算问题,被称为费米问题,是以科学家费米命名的。为什么面试会问这种问题呢?这类问题能把两类人清楚地区分出来。一类是具有文科思维的人,擅长赞叹和模糊想象,它主要依靠的是人的第一反应和直觉,比如小孩...
碎片化的时代,如何学习
今天周末,和大家聊聊学习这件事情。 在如今这个社会,我们的时间被各类 APP 撕的粉碎。 刷知乎、刷微博、刷朋友圈; 看论坛、看博客、看公号; 等等形形色色的信息和知识获取方式一个都不错过。 貌似学了很多,但是却感觉没什么用。 要解决上面这些问题,首先要分清楚一点,什么是信息,什么是知识。 那什么是信息呢? 你一切听到的、看到的,都是信息,比如微博上的明星出轨、微信中的表情大战、抖音上的...
相关热词 基于c#波形控件 c# 十进制转十六进制 对文件aes加密vc# c#读取栈中所有的值 c# rsa256加密 好 学c# 还是c++ c# 和java的差距 c# curl网络框架 c# https证书请求 c# 中崎
立即提问