checkrule.js

棋子走法解析:象棋规则详解
/*****************************************/ /****************棋子的走法***************/ /*****************************************/ function check(chess, from, to){ /****************************[卒]*******************************/ if(chess == "011" || chess == "012" || chess == "013" || chess == "014" || chess == "015"){   //控制黑旗卒的走法 if(from >= 46 && (from - to == 1 || to - from == 1)) return 1;    //横向走 if(to - from == 9)  //卒字必须向前走,因此它的目的坐标减去走前的坐标必须等于9,说明走的是直线 return 1;    //向前走一步 } if(chess == "111" || chess == "112" || chess == "113" || chess == "114" || chess == "115"){   //控制黑旗卒的走法 if(from <= 45 && (from - to == 1 || to - from == 1)) return 1;   //横向走 if(from - to == 9) //卒字必须向前走,因此它的原点坐标减去目的坐标必须等于9,说明走的是直线 return 1;   //向前走一步 } /*****************************[炮]******************************/ if(chess == "010" || chess == "009" || chess == "110" || chess == "109"){   //控制炮的走法 if(to - from > 0 && (to - from) % 9 == 0){    //控制炮向下走 var count = 0; for(var i = from + 9;i < to;i += 9){ if(document.getElementById("chess_value_"+i).value != "blank") count ++; } if(count == 0 && document.getElementById("chess_value_"+to).value == "blank")   //炮前不允许有旗子时,可以走棋 return 1; if(count == 1 && document.getElementById("chess_value_"+to).value != "blank")   //炮前面有一个旗子时,可以走棋 return 1; } if(from - to > 0 && (from - to) % 9 == 0){   //控制炮向上走 var count = 0; for(var i = to + 9;i < from;i += 9){ if(document.getElementById("chess_value_"+i).value != "blank") count ++; } if(count == 0 && document.getElementById("chess_value_"+to).value == "blank") return 1; if(count == 1 && document.getElementById("chess_value_"+to).value != "blank") return 1; } if(to - from > 0 && to - from < 9){   //控制炮向右走 var count = 0; for(var i = from + 1;i < to;i ++){ if(document.getElementById("chess_value_"+i).value != "blank") count ++; } if(count == 0 && document.getElementById("chess_value_"+to).value == "blank") return 1; if(count == 1 && document.getElementById("chess_value_"+to).value != "blank") return 1; } if(from - to > 0 && from - to < 9){   //控制炮向左走 var count = 0; for(var i = to + 1;i < from;i ++) { if(document.getElementById("chess_value_"+i).value != "blank") count ++; } if(count == 0 && document.getElementById("chess_value_"+to).value == "blank") return 1; if(count == 1 && document.getElementById("chess_value_"+to).value != "blank") return 1; } } /****************************[车]*******************************/ if(chess == "008" || chess == "007" || chess == "108" || chess == "107"){  //控制车的走法 if(to - from > 0 && (to - from) % 9 == 0){   //控制车向上走 var count = 0; for(var i = from + 9;i < to;i += 9){ if(document.getElementById("chess_value_"+i).value != "blank") count ++; } if(count == 0) return 1; } if(from - to > 0 && (from - to) % 9 == 0){   //控制车向下走 var count = 0; for(var i = to + 9;i < from;i += 9) { if(document.getElementById("chess_value_"+i).value != "blank") count ++; } if(count == 0) return 1; } if(to - from > 0 && to - from < 9){   //控制车向右走 var count = 0; for(var i = from + 1;i < to;i ++) { if(document.getElementById("chess_value_"+i).value != "blank") count ++; } if(count == 0) return 1; } if(from - to > 0 && from - to < 9){   //控制车向左走 var count = 0; for(var i = to + 1;i < from;i ++){ if(document.getElementById("chess_value_"+i).value != "blank") count ++; } if(count == 0) return 1; } } /*****************************[马]******************************/ if(chess == "006" || chess == "005" || chess == "106" || chess == "105"){  //控制马的走法 if(to - from == 19 || to - from == 17){   //控制马向上走“日”字(向前上17或19个坐标点),并且马所在坐标点的直上方必须是空棋 if(document.getElementById("chess_value_"+(from + 9)).value == "blank") return 1; } if(from - to == 19|| from - to == 17){   //控制马向下走“日”字(向下走17或19个坐标点),并且马所在坐标点的直下方必须是空棋 if(document.getElementById("chess_value_"+(from - 9)).value == "blank") return 1; } if(to - from == 7 || from - to == 11){     //控制向左走横“日”字(向左上角和左下角走7或11个坐标点) if(document.getElementById("chess_value_"+(from - 1)).value == "blank")   //马所在坐标点减1必须是空棋 return 1; } if(from - to == 7 || to - from == 11){     //控制向右走横“日”字(向下走7和11个坐标点) if(document.getElementById("chess_value_"+(from + 1)).value == "blank")   //马所在坐标点+1必须是空棋 return 1; } } /****************************[象]******************************/ if(((chess == "004" || chess == "003") && to <= 45) || ((chess == "104" || chess == "103") && to >= 46)){  //控制象的走法 if(to - from == 16){   //控制象向左下走 if(document.getElementById("chess_value_"+(from + 8)).value == "blank")  //该棋子当前坐标点加8必须是空棋,田字的心必须是空棋,不能超过16个坐标点区域 return 1; } if(from - to == 16){   //控制象向右上走 if(document.getElementById("chess_value_"+(from - 8)).value == "blank")  //该棋子当前坐标点减8必须是空棋,田字的心必须是空棋,不能超过16个坐标点区域 return 1; } if(to - from ==20){   //控制象向右下走 if(document.getElementById("chess_value_"+(from + 10)).value == "blank") //该棋子当前坐标点加10必须是空棋,田字的心必须是空棋,不能超过20个坐标点区域 return 1; } if(from - to == 20){   //控制象向左上走 if(document.getElementById("chess_value_"+(from - 10)).value == "blank") //该棋子当前坐标点减10必须是空棋,田字的心必须是空棋,不能超过20个坐标点区域 return 1; } } /****************************[士]*****************************/ if(chess == "002" || chess == "001"){  //控制黑旗士的走法(所走范围在4、6、14、22、24点),不能超过8个或10个坐标点 if((to == 6 || to == 4 || to == 14 || to == 22 || to == 24) && (to - from == 8 || from - to == 8 || to - from == 10 || from - to == 10)) return 1; } if(chess == "102" || chess == "101"){  //控制红旗士的走法 if((to == 85 || to == 87 || to == 77 || to == 69 || to == 67) && (to - from == 8 || from - to == 8 || to - from == 10 || from - to == 10)) return 1; } /****************************[将]*****************************/ if(chess == "000"){   //控制黑旗将的走法 if(((to >= 4 && to <= 6) || (to >= 13 && to <= 15) || (to >= 22 && to <= 24)) && (to - from == 1 || from - to == 1 || to - from == 9 || from - to == 9)) return 1; if(to > from && (to - from) % 9 == 0 && document.getElementById("chess_value_"+to).value == "100"){ var count = 0; for(var i = from + 9;i < to;i += 9){  //该棋子所对应的直上方或直下方如果不为空,则Count变量加1,说明有棋,不能走,系统会弹出提示 if(document.getElementById("chess_value_"+i).value != "blank") count ++; } if(count == 0)   //如果count变量值为0,则说明可以行走 return 1; } } if(chess == "100"){   //控制红旗将的走法(所走范围在85、86、87、76、77、78、67、68、69点) if(((to <= 87 && to >= 85) || (to <= 78 && to >=76) || (to <= 69 && to >= 67)) && (to - from == 1 || from - to == 1 || to - from == 9 || from - to == 9))  return 1; if(from > to && (from - to) % 9 == 0 && document.getElementById("chess_value_"+to).value == "000"){ var count = 0; for(var i = to + 9;i < from;i += 9){ //该棋子所对应的直上方或直下方如果不为空,则Count变量加1,说明有棋,不能走,系统会弹出提示 if(document.getElementById("chess_value_"+i).value != "blank") count ++; } if(count == 0)   //如果count变量值为0,则说明可以行走 return 1; } } return 0; }

转载于:https://www.cnblogs.com/gxldan/archive/2011/10/31/4066767.html

业务: {{ data }} <button @click=“checkForm”>提交 <button @click=“clearForm”>清空 <script setup> import myForm from '@/components/myForm'; import myFormItem from '@/components/myForm/myFormItem'; import MyInput from '@/components/input'; import MySelect from '@/components/mySelect'; import MyOption from '@/components/mySelect/myOption'; const forRef = ref() const sexOptions = reactive([{ lable: "男", value: 1 }, { lable: "女", value: 2 }]) const data = reactive({ name: "", age: "", sex: "", price: "", stock: "", manufacturer: "", formCheck: null }) function mycheck(item) { if (item == 1) { return { check: false, message: "不能等于1" } } else { return { check: true } } } function checkForm() { data.formCheck = forRef.value.validate() } function clearForm() { forRef.value.resetField() } const rules = reactive({ name: [ { required: true, message: '请输入产品名称', trigger: 'blur' }, { max: 10, message: '长度超过10位', trigger: 'blur' }, ], description: [ { required: true, message: '请输入产品描述', trigger: 'blur' }, { max: 200, message: '长度超过200位', trigger: 'blur' }, ], category: [ { required: true, message: '请选择产品分类', trigger: 'change' }, ], }); </script> form:<template> <slot> </slot> </template> <script setup> import { provide } from 'vue'; const props = defineProps({ model: { type: Object, required: true } }) const form = reactive({ childItem: [], childProp: [], }) provide(‘addChildItem’, (item) => { form.childItem.push(item) }) provide(‘model’, props.model) provide(‘addChildProp’, (item) => { form.childProp.push(item) }) function validate() { let bool = true form.childItem.forEach(item => { if (item.validate()) { bool = false } }) return bool; } function resetField() { form.childProp.forEach(item => { if (props.model[item]) { props.model[item] = null } }) } defineExpose({ validate, resetField }) form-item: {{ props.label }} : {{ errorMessage }} <script setup> const props = defineProps({ label: { type: String, required: true, default: '' }, prop: { type: String, default: '' }, rules: { type: Array } }) const checkBool = ref(false) const errorMessage = ref("") const addChildProp = inject('addChildProp') const addChildItem = inject('addChildItem') provide('onItemChange', () => { validateItem() }) const model = inject('model') onMounted(() => { if (addChildProp) { addChildProp(props.prop) } if (addChildItem) { addChildItem({ validate: validateItem }) } }) function validateItem() { if (!model || !props.prop) { checkBool.value = false; return false } for (let rule of props.rules) { // 必填校验 if (rule.required && !model[props.prop]) { errorMessage.value = rule.message || '请输入内容'; checkBool.value = true; return true; // 校验失败 } const value = model[props.prop]; // 数值最小值校验 if (rule.min !== undefined && value !== null && value !== '') { const numValue = Number(value); if (isNaN(numValue) || numValue < rule.min) { errorMessage.value = rule.message || `不能小于 ${rule.min}`; checkBool.value = true; return true; } } // 数值最大值校验 if (rule.max !== undefined && value !== null && value !== '') { const numValue = Number(value); if (isNaN(numValue) || numValue > rule.max) { errorMessage.value = rule.message || `不能超过 ${rule.max}`; checkBool.value = true; return true; } } // 字符串长度最大值校验 if (rule.maxLength !== undefined && value && value.length > rule.maxLength) { errorMessage.value = rule.message || `不能超过 ${rule.maxLength} 个字符`; checkBool.value = true; return true; } if (rule.validate) { let check = rule.validate(value) if (!check.check) { errorMessage.value = check.message || rule.message; checkBool.value = true; return true; } } } checkBool.value = false; return false; // 校验成功 } </script> <style> .label { min-width: 100px; text-align: right; } </style> input:<template> <input v-model="model" @change="handleChange"/> </template> <script setup> const model = defineModel(); const onItemChange = inject('onItemChange') function handleChange() { if (onItemChange) { onItemChange() } } </script> 为什么max不大于10的check不好使
最新发布
07-18
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值